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