if .p
t "TopSym+"
t "TopMac"
t "Sym128.erg"
endif
n "Connect.1"
c "Connect V1.0"
a "Holger G. Heimes"
f APPLICATION
z $c0
o APP_RAM
p Start
:SLBase = $de00
:SLData = $de00
:SLStatus = $de01
:SLCommand = $de02
:SLControl = $de03
:CDMask = %01000000
:DSRMask = %00100000
:TransMask = %00010000
:RecvMask = %00001000
:Xoff = %11110011
:Xon = %00001000
:Start jsr ScreenInit
jsr UmbruchInit
; jsr MenuInit
; jsr IconInit
jsr TastaturInit
jsr ProzessInit
jsr PufferInit
jsr SLInit
jsr NMIInit
rts
:ScreenInit lda #0
jsr SetPattern
jsr i_Rectangle
b 0,199
w 0,639
rts
:TastaturInit php
sei
LoadW keyVector,TastAbfrage
plp
rts
:PufferInit LoadB TransIn,0
sta TransOut
sta RecvIn
sta RecvOut
LoadW a0,TransPuffer
LoadW a1,RecvPuffer
rts
:NMIInit php
sei
MoveW NMI_VECTOR,SavedNMI_VECTOR
LoadW NMI_VECTOR,MyNMIRout
plp
rts
:SLInit jsr InitForIO
lda #0
sta SLStatus ;progr. RESET
lda #%00011000 ;1 Stopbit
;8 Wortlänge
;Int. Baud Rate Gen.
;2400 Baud
sta SLControl
lda #%00011001 ;No Parity
;Echo Mode
;TrIRQ dis., RTS low
;IRQ enabled
;enable Recv/Trans
sta SLCommand
jsr DoneWithIO
rts
:IconInit LoadW r0,IconTab
jmp DoIcons
:IconTab b 1
w 0
b 0
w 0
b 0,0,1,1
w 0
:ProzessInit LoadW r0,ProzessTab
lda #2
jmp InitProcesses
:ProzessTab w Prozess1
w 5
w Prozess2
w 1
:Prozess1 ldy TransOut ;unterer Zeiger
ldx TransROFlag
bne :senden ;RO-> Out<In
cpy TransIn
blt :senden
rts
::senden lda (a0),y
sta Temp
jsr InitForIO
::loop lda SLStatus
and #%00010000
beq :loop
lda Temp
sta SLData
jsr DoneWithIO
inc TransOut
beq :ROlöschen
rts
::ROlöschen lda #0
sta TransROFlag
rts
:TransROFlag b 0
:TransIn b 0
:TransOut b 0
:Prozess2 ldy RecvOut ;unterer Zeiger
ldx RecvROFlag
bne :ausgeben ;RO-> Out<In
cpy RecvIn
blt :ausgeben
rts
::ausgeben lda (a1),y
sta Temp2
jsr TextAusgabe
inc RecvOut
beq :ROlöschen
rts
::ROlöschen lda #0
sta RecvROFlag
rts
:RecvROFlag b 0
:RecvIn b 0
:RecvOut b 0
:TastAbfrage lda keyData
cmp #27
bne :0
jmp Abschluss
::0 cmp #32
blt :tastende
cmp #127
bgt :tastende
ldy TransIn
sta (a0),y
inc TransIn
bne :tastende
lda #255
sta TransROFlag
::tastende rts
:MyNMIRout php
sei
jsr InitForIO
lda SLStatus
bpl :geosNMI
and #%00001000
beq :geosNMI
lda SLData
ldy RecvIn
sta (a1),y
inc RecvIn
ldx RecvIn
php
lda SLCommand
cpx RecvOut
bne :nooverflow
and #Xoff
jmp :rollover
::nooverflow ora #Xon
::rollover sta SLCommand
plp
bne :geosNMI
lda #255
sta RecvROFlag
::geosNMI jsr DoneWithIO
plp
jmp (SavedNMI_VECTOR)
:SavedNMI_VECTOR w 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
inc 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
:TextAusgabe PushB dispBufferOn
LoadB dispBufferOn,ST_WR_FORE
LoadW a2,WordPuffer
lda Temp2
cmp #10
bne :1
rts
::1 cmp #CR
bne :2
LoadW r11,0
lda r1H
clc
adc #8
sta r1H
cmp #196
ble :3
jsr Scroll
::3 MoveW r11,XPos
MoveB r1H,YPos
jmp WPuflöschen
::2 cmp #FORWARDSPACE
bne :4
lda #" "
::4 cmp #" "
bne :8
jsr WPuflöschen
jmp :9
::8 ldy WordPufferCount
sta (a2),y
inc WordPufferCount
::9 pha
tax
bmi :sonderzeichen
LoadW r0,Font0bis127
jmp :putit
::sonderzeichen LoadW r0,Font128bis255
::putit jsr LoadCharSet
MoveW XPos,r11
MoveB YPos,r1H
pla
bpl :put
and #%01111111
::put jsr PutChar
::12 MoveW r11,XPos
MoveB r1H,YPos
::15 PopB dispBufferOn
jmp UseSystemFont
: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
: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
:Abschluss php
sei
MoveW SavedNMI_VECTOR,NMI_VECTOR
plp
jmp EnterDeskTop