if .p

t "TopSym+"

t "TopMac"

t "Sym128.erg"

endif

n "TextView.1"

c "Textview128 V1.0"

a "Holger G. Heimes"

f APPLICATION

z $c0

o APP_RAM

p Start

i

:TextPuffer = $1200

:Start jsr ScreenInit

jsr PauseInit

jsr UmbruchInit

jsr DriveInit

jsr Fileauswahl

jsr PufferLesen

jsr ProzessInit

LoadB SprachFlag,0

rts

:Fileauswahl php

sei

clc

jsr StartMouseMode

plp

::14 jsr OpenDisk

cpx #0

beq :15

jmp :5

::15 ldx #a8

jsr GetPtrCurDkNm

ldy #0

::0 lda (a8),y

cmp #$a0

bne :1

lda #0

sta DiskName,y

beq :2

::1 sta DiskName,y

iny

bne :0

::2 lda curDrive

clc

adc #"A"-8

sta DiskNr

lda SprachFlag

beq :US

LoadW GERIconTab,MyIcon2

LoadW USIconTab,MyIcon1

jmp :100

::US LoadW GERIconTab,MyIcon1

LoadW USIconTab,MyIcon2

::100 lda curType

cmp #DRV_1581

bgt :101

LoadB DiskIcon,DISK

bne :102

::101 LoadB DiskIcon,0

::102 LoadW r5,FileName

ldy #0

tya

sta (r5),y

LoadW r10,FileClass

LoadB r7L,7 ;Dokument

LoadW r0,FileBox

jsr DoDlgBox

CmpBI r0L,DISK

beq :3

CmpBI r0L,OPEN

beq :4

CmpBI r0L,100

beq :5

jmp Quit

::4 jsr ClearMouseMode

jmp Fileöffnen

::3 LoadW r0,NeueDiskBox

jsr DoDlgBox

jmp Fileauswahl

::5 ldx curDrive

inx

cpx MaxDriveNr

ble :13

ldx #8

::13 txa

jsr SetDevice

jmp :14

:FileBox b %10000001 ;Standard

b OPEN,17,18

b DBUSRICON,17,52

w DriveIconTab

b CANCEL,17,69

b DBUSRICON,17,86

w USIconTab

b DBUSRICON,20,86

w GERIconTab

b DBTXTSTR,136,8

w Disk

b DBTXTSTR,136,16

w DiskName

b DBGETFILES,4,4

b DBTXTSTR,18*8+2,92

w UStxt

b DBTXTSTR,21*8+2,92

w GERtxt

:DiskIcon b DISK,17,35

b NULL

:NeueDiskBox b %10000001

b DBTXTSTR,20,20

w NeueDisk

b DBTXTSTR,20,40

w NeueDiskUS

b OK,8,60

b NULL

:FileName s 17

:FileClass b "Write Image",0

:DiskName s 17

:Disk b BOLDON,"Disk : ("

:DiskNr b "A)",PLAINTEXT,0

:NeueDisk b BOLDON,"Bitte neue Disk einlegen!",PLAINTEXT,0

:NeueDiskUS b BOLDON,"Please insert new disk!",PLAINTEXT,0

:SprachFlag b 0

:MyIcon1

:MyIcon2

:USIconTab w MyIcon2

b 0,0

b 2,8

w USIconRout

:USIconRout LoadB SprachFlag,0

jsr IconFill

rts

:UStxt b PLAINTEXT,"US",NULL

:GERIconTab w MyIcon1

b 0,0

b 2,8

w GERIconRout

:GERIconRout LoadB SprachFlag,1

jsr IconFill

rts

:GERtxt b PLAINTEXT,"GER",NULL

:IconFill lda SprachFlag

eor #1

pha

jsr SetPattern

jsr i_Rectangle

b 86+32+1,86+32+6

w 17*16+1+128,17*16+7+128+8-1

pla

eor #1

jsr SetPattern

jsr i_Rectangle

b 86+32+1,86+32+6

w 20*16+1+128,20*16+7+128+8-1

rts

:DriveIconTab w DriveIcon

b 0,0

b 12,16

w DriveRout

:DriveIcon

:DriveRout LoadB sysDBData,100

jmp RstrFrmDialogue

:Fileöffnen jsr LoadFont

LoadW r6,FileName

jsr FindFile

cpx #0

beq :1

jmp Fileauswahl

::1 LoadW r9,dirEntryBuf

jsr GetFHdrInfo

cpx #0

beq :11

jmp Fileauswahl

::11 lda fileHeader+$5a

cmp #"1"

beq :12

LoadB Flag1x,0

beq :13

::12 LoadB Flag1x,255

::13 LoadW r4,IndexBlock

jsr GetBlock

cpx #0

beq :10

jmp Fileauswahl

::10 LoadW a0,IndexBlock

LoadW XPos,0

LoadB YPos,4

jsr ScreenInit

LoadB PauseFlag,0

sta EndFlag

rts

:XPos w 0

:YPos b 4

:PufferLesen LoadW a1,TextPuffer ;a1 = Ptr. Text

CmpWI LastBlock,0

beq :0

MoveW LastBlock,r1

jmp :1

::0 AddVW 2,a0

ldy #1

lda (a0),y

sta r1H

dey

lda (a0),y

sta r1L

bne :10

lda #255

sta EndFlag

rts

::10 lda Flag1x

beq :1

AddVW 20,a1

::1 LoadW r7,TextPuffer

LoadW r2,$4e00

jsr ReadFile

cpx #0

beq :2

MoveW r1,LastBlock

dey

dey

sty NextByte

MoveW r7,LastBytePlus1

rts

::2 MoveW r7,LastBytePlus1

LoadW LastBlock,0

sta NextByte

rts

:LastBlock w 0

:NextByte b 0

:LastBytePlus1 w 0

:Flag1x b 0

:PauseInit php

sei

LoadW keyVector,MyKeys

plp

rts

:MyKeys lda keyData

cmp #" "

beq :1

cmp #27

bne :2

jsr Fileauswahl

jsr PufferLesen

cpx #255

bne :0

jmp Quit

::0 lda #0

sta PauseFlag

sta EndFlag

::2 rts

::1 lda PauseFlag

eor #255

sta PauseFlag

rts

:PauseFlag b 0

:UmbruchInit php

sei

LoadW StringFaultVec,Umbruch

plp

:Umbruch ldy #0

lda (a1),y

cmp #" "

beq :2

cmp #9

beq :2

MoveW r11,a5 ;rechte Grenze

MoveB WordPufferCount,a4L

LoadB a3L,8

ldy #a4L

ldx #a3L

jsr BBMult

MoveW a5,a4

SubW a3,a4 ;linke Grenze

lda r1H

sec

sbc #4

sta r2L ;obere Grenze

clc

adc #6

sta r2H ;untere Grenze

MoveW a4,r3

MoveW a5,r4

jsr Rectangle

::2 LoadW r11,0

AddVB 8,r1H

cmp #196

ble :3

jsr Scroll

::3 LoadW r0,WordPuffer

lda WordPuffer

beq :4

jsr PutString

::4 jmp WPuflöschen

:ProzessInit LoadW r0,ProzessTab

lda #1

jsr InitProcesses

ldx #0

jsr RestartProcess

rts

:ProzessTab w Prozess1

w 1

:Prozess1 LoadW r0,MyFont

jsr LoadCharSet

jsr TextDarstellen

jmp UseSystemFont

:ScreenInit lda #0

jsr SetPattern

jsr i_Rectangle

b 0,199

w 0,639

rts

:TextDarstellen lda EndFlag

beq :20

rts

::20 lda PauseFlag

beq :21

rts

::21 PushB dispBufferOn

LoadB dispBufferOn,ST_WR_FORE

LoadW a2,WordPuffer

::TextFortsetzen MoveW XPos,r11

MoveB YPos,r1H

::1 ldy #0

lda (a1),y

cmp #CR

bne :6

::30 LoadW r11,0

lda r1H

clc

adc #8

sta r1H

cmp #196

ble :13

jsr Scroll

::13 MoveW r11,XPos

MoveB r1H,YPos

jsr WPuflöschen

jmp :15

::6 cmp #0

bne :7

lda #255

sta EndFlag

AddVW 1,a1

jmp :15

::7 cmp #ESC_RULER

bne :0

AddVW 27,a1 ;ESC_RULER V 2.x

jmp :1

::0 cmp #NEWCARDSET

bne :2

AddVW 4,a1

jmp :1

::2 cmp #ESC_GRAPHICS

bne :3

AddVW 5,a1

jmp :1

::3 cmp #FORWARDSPACE

bne :4

lda #" "

::4 cmp #PAGE_BREAK

bne :5

PushW r11

PushB r1H

jsr PufferLesen

PopB r1H

PopW r11

SubVW 1,a1

jmp :30

::5 cmp #" "

bne :8

jsr WPuflöschen

jmp :9

::8 ldy WordPufferCount

sta (a2),y

inc WordPufferCount

::9 jsr PutChar

::12 MoveW r11,XPos

MoveB r1H,YPos

::15 AddVW 1,a1

CmpW a1,LastBytePlus1

blt :10

jsr PufferLesen

lda NextByte

clc

adc a1L

sta a1L

bcc :10

lda #0

adc a1H

sta a1H

::10 PopB dispBufferOn

rts

:WordPuffer s 79

:WordPufferCount b 0

:WPuflöschen pha

tya

pha

ldy #0

tya

::loop sta WordPuffer,y

iny

cpy #80

bne :loop

pla

tay

pla

rts

:EndFlag b 0

:Scroll jsr InitForIO

jsr SaveVDC

LoadW StartAdd,$0280

LoadW UpdateAdd,$0000

lda #24

sta $d600

::wait0 bit $d600

bpl :wait0

lda $d601

ora #%10000000

tax

lda #24

sta $d600

::wait10 bit $d600

bpl :wait10

stx $d601 ;copy-bit setzen

::loop lda #18

sta $d600

::wait3 bit $d600

bpl :wait3

lda UpdateAdd+1

sta $d601 ;updateadresse high

lda #19

sta $d600

::wait4 bit $d600

bpl :wait4

lda UpdateAdd

sta $d601 ;updateadresse low

lda #32

sta $d600

::wait1 bit $d600

bpl :wait1

lda StartAdd+1

sta $d601 ;startadresse high

lda #33

sta $d600

::wait2 bit $d600

bpl :wait2

lda StartAdd

sta $d601 ;startadresse low

lda #30

sta $d600

::wait5 bit $d600

bpl :wait5

lda #160 ;2 Zeilen

sta $d601

AddVW $a0,StartAdd

AddVW $a0,UpdateAdd

CmpWI StartAdd,$3e80

bge :endcopy

jmp :loop

::endcopy jsr RestoreVDC

jsr DoneWithIO

lda #0

jsr SetPattern

jsr i_Rectangle

b 192,199

w 0,639

LoadW r11,0

LoadB r1H,196

rts

:StartAdd w $0280

:UpdateAdd w 0

:SaveVDC lda #24

sta $d600

::wait0 bit $d600

bpl :wait0

MoveB $d601,Save24

lda #18

sta $d600

::wait1 bit $d600

bpl :wait1

MoveB $d601,Save18

lda #19

sta $d600

::wait2 bit $d600

bpl :wait2

MoveB $d601,Save19

lda #32

sta $d600

::wait3 bit $d600

bpl :wait3

MoveB $d601,Save32

lda #33

sta $d600

::wait4 bit $d600

bpl :wait4

MoveB $d601,Save33

lda #30

sta $d600

::wait5 bit $d600

bpl :wait5

MoveB $d601,Save30

rts

:RestoreVDC lda #24

sta $d600

::wait0 bit $d600

bpl :wait0

MoveB Save24,$d601

lda #18

sta $d600

::wait1 bit $d600

bpl :wait1

MoveB Save18,$d601

lda #19

sta $d600

::wait2 bit $d600

bpl :wait2

MoveB Save19,$d601

lda #32

sta $d600 ;copy-bit setzen

::wait3 bit $d600

bpl :wait3

MoveB Save32,$d601

lda #33

sta $d600

::wait4 bit $d600

bpl :wait4

MoveB Save33,$d601

lda #30

sta $d600

::wait5 bit $d600

bpl :wait5

MoveB Save30,$d601

rts

:Save18 b 0

:Save19 b 0

:Save24 b 0

:Save30 b 0

:Save32 b 0

:Save33 b 0