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