; *** ERROR: Descending address: 000D-000F 4: Disk Status DS$ descriptor (length/ptr) ***
; *** ERROR: Descending address: 03e9 4.40 ***
; *** ERROR: Descending address: 03ea 4.40 ***
; *** ERROR: Descending address: 03eb 4.40 ***
; *** ERROR: Descending address: 03ec 4.40: Chime Time ***
; *** ERROR: Descending address: 03ed 4.40: Counter to speed TI by 6/5 ***
; *** ERROR: Descending address: e1aa ? ***
; 3: free space for 4K EPROMstmdsp BASIC Command Vectors WORD
; Commodore PET 8032 ROM Memory Map
; V1.3 20 May 1995
;
; BASIC 4.0 Interpreter ROM ($B000 - $DFFF)
;
; BASIC 4.0 Interpreter
; Machine Language Monitor
;
B000 sB000 .word B7C7 B6DD BD18 B882 BBA3 BBBD C120 BC01
B010 .word B92F B82F B807 B8B2 B7B6 B812 B85C B8C5
B020 .word B7C5 B8D5 C962 FFD4 FFD7 FFDA C4DB C959
B030 .word BA87 BAA7 B7ED B62F B5ED BA8D FFDD FFBF
B040 .word FFC2 BB79 B5D1 B7AB FF92 FF95 FF98 FF9B
B050 .word FF9E FFA1 FFA4 FFA7 FFAA FFAD FFB0 FFB3
B060 .word FFB6 FFB9 FFB3
; fundsp BASIC Function Vectors WORD
B066 .word CD6F CE02 CD8E 0000 C4A8 C4C9 D108 D229
B076 .word CB20 D184 D282 D289 D2D2 D32C C943 C8B2
B086 .word C58E C8E3 C8C1 C822 C836 C862 C86D
; optab BASIC Operator Vectors DATA
; Each Operator Vector is preceded by a priority code.
B094 sB094 .byte 79 ;Y
B095 sB095 .byte 9F ;.
B096 sB096 .byte C9 79 88 C9 7B 60 CB 7B ;IY.I{`K{
B09E .byte 47 CC 7F 11 D1 50 88 C0 ;gL..Qp..
B0A6 .byte 46 85 C0 7D 4A D1 5A CB ;f..}jQzK
B0AE .byte BE 64 B5 C0 ;.D..
; reslst BASIC Command Keyword Table DATA
B0B2 .byte 45 4E C4 46 4F D2 4E 45 ;enDfoRne
B0BA .byte 58 D4 44 41 54 C1 49 4E ;xTdatAin
B0C2 .byte 50 55 54 A3 49 4E 50 55 ;put.inpu
B0CA .byte D4 44 49 CD 52 45 41 C4 ;TdiMreaD
B0D2 .byte 4C 45 D4 47 4F 54 CF 52 ;leTgotOr
B0DA .byte 55 CE 49 C6 52 45 53 54 ;uNiFrest
B0E2 .byte 4F 52 C5 47 4F 53 55 C2 ;orEgosuB
B0EA .byte 52 45 54 55 52 CE 52 45 ;returNre
B0F2 .byte CD 53 54 4F D0 4F CE 57 ;MstoPoNw
B0FA .byte 41 49 D4 4C 4F 41 C4 53 ;aiTloaDs
B102 .byte 41 56 C5 56 45 52 49 46 ;avEverif
B10A .byte D9 44 45 C6 50 4F 4B C5 ;YdeFpokE
B112 .byte 50 52 49 4E 54 A3 50 52 ;print.pr
B11A .byte 49 4E D4 43 4F 4E D4 4C ;inTconTl
B122 .byte 49 53 D4 43 4C D2 43 4D ;isTclRcm
B12A .byte C4 53 59 D3 4F 50 45 CE ;DsySopeN
B132 .byte 43 4C 4F 53 C5 47 45 D4 ;closEgeT
B13A .byte 4E 45 D7 ;neW
; msclst BASIC Misc. Keyword Table DATA
B13D .byte 54 41 42 A8 54 CF 46 CE ;tab.tOfN
B145 .byte 53 50 43 A8 54 48 45 CE ;spc.theN
B14D .byte 4E 4F D4 53 54 45 D0 ;noTsteP
; oplist BASIC Operator Keyword Table DATA
B154 .byte AB AD AA AF DE 41 4E C4 ;.....anD
B15C .byte 4F D2 BE BD BC ;oR...
; funlst BASIC Function Keyword Table DATA
B161 .byte 53 47 CE 49 4E D4 41 42 ;sgNinTab
B169 .byte D3 55 53 D2 46 52 C5 50 ;SusRfrEp
B171 .byte 4F D3 53 51 D2 52 4E C4 ;oSsqRrnD
B179 .byte 4C 4F C7 45 58 D0 43 4F ;loGexPco
B181 .byte D3 53 49 CE 54 41 CE 41 ;SsiNtaNa
B189 .byte 54 CE 50 45 45 CB 4C 45 ;tNpeeKle
B191 .byte CE 53 54 52 A4 56 41 CC ;Nstr.vaL
B199 .byte 41 53 C3 43 48 52 A4 4C ;asCchr.l
B1A1 .byte 45 46 54 A4 52 49 47 48 ;eft.righ
B1A9 .byte 54 A4 4D 49 44 A4 47 CF ;t.mid.gO
; - Additional Action Keywords DATA
B1B1 .byte 43 4F 4E 43 41 D4 44 4F ;concaTdo
B1B9 .byte 50 45 CE 44 43 4C 4F 53 ;peNdclos
B1C1 .byte C5 52 45 43 4F 52 C4 48 ;ErecorDh
B1C9 .byte 45 41 44 45 D2 43 4F 4C ;eadeRcol
B1D1 .byte 4C 45 43 D4 42 41 43 4B ;lecTback
B1D9 .byte 55 D0 43 4F 50 D9 41 50 ;uPcopYap
B1E1 .byte 50 45 4E C4 44 53 41 56 ;penDdsav
B1E9 .byte C5 44 4C 4F 41 C4 43 41 ;EdloaDca
B1F1 .byte 54 41 4C 4F C7 52 45 4E ;taloGren
B1F9 .byte 41 4D C5 53 43 52 41 54 ;amEscrat
B201 .byte 43 C8 44 49 52 45 43 54 ;cHdirect
B209 .byte 4F 52 D9 00 ;orY.
; errtab Error Message Table DATA
B20D sB20D .byte 4E 45 58 54 20 57 49 54 ;next wit
B215 .byte 48 4F 55 54 20 46 4F D2 ;hout foR
B21D .byte 53 59 4E 54 41 D8 52 45 ;syntaXre
B225 .byte 54 55 52 4E 20 57 49 54 ;turn wit
B22D .byte 48 4F 55 54 20 47 4F 53 ;hout gos
B235 .byte 55 C2 4F 55 54 20 4F 46 ;uBout of
B23D .byte 20 44 41 54 C1 49 4C 4C ; datAill
B245 .byte 45 47 41 4C 20 51 55 41 ;egal qua
B24D .byte 4E 54 49 54 D9 4F 56 45 ;ntitYove
B255 .byte 52 46 4C 4F D7 4F 55 54 ;rfloWout
B25D .byte 20 4F 46 20 4D 45 4D 4F ; of memo
B265 .byte 52 D9 55 4E 44 45 46 27 ;rYundef'
B26D .byte 44 20 53 54 41 54 45 4D ;d statem
B275 .byte 45 4E D4 42 41 44 20 53 ;enTbad s
B27D .byte 55 42 53 43 52 49 50 D4 ;ubscripT
B285 .byte 52 45 44 49 4D 27 44 20 ;redim'd
B28D .byte 41 52 52 41 D9 44 49 56 ;arraYdiv
B295 .byte 49 53 49 4F 4E 20 42 59 ;ision by
B29D .byte 20 5A 45 52 CF 49 4C 4C ; zerOill
B2A5 .byte 45 47 41 4C 20 44 49 52 ;egal dir
B2AD .byte 45 43 D4 54 59 50 45 20 ;ecTtype
B2B5 .byte 4D 49 53 4D 41 54 43 C8 ;mismatcH
B2BD .byte 53 54 52 49 4E 47 20 54 ;string t
B2C5 .byte 4F 4F 20 4C 4F 4E C7 46 ;oo lonGf
B2CD .byte 49 4C 45 20 44 41 54 C1 ;ile datA
B2D5 .byte 46 4F 52 4D 55 4C 41 20 ;formula
B2DD .byte 54 4F 4F 20 43 4F 4D 50 ;too comp
B2E5 .byte 4C 45 D8 43 41 4E 27 54 ;leXcan't
B2ED .byte 20 43 4F 4E 54 49 4E 55 ; continu
B2F5 .byte C5 55 4E 44 45 46 27 44 ;Eundef'd
B2FD .byte 20 46 55 4E 43 54 49 4F ; functio
B305 .byte CE ;N
; okk Misc. Messages DATA
B306 .byte 20 45 52 52 4F 52 00 20 ; error.
B30E .byte 49 4E 20 00 0D 52 45 41 ;in ..rea
B316 .byte 44 59 2E 0D 00 0D 42 52 ;dy....br
B31E .byte 45 41 4B 00 ;eak.
; fndfor Find FOR/GOSUB Entry on Stack
B322 iB322 TSX
B323 INX
B324 INX
B325 INX
B326 INX
B327 iB327 LDA $0101,X
B32A CMP #$81
B32C BNE $B34F
B32E LDA $47
B330 BNE $B33C
B332 LDA $0102,X
B335 STA $46 ; Pointer: Index Variable for FOR/NEXT
B337 LDA $0103,X
B33A STA $47
B33C iB33C CMP $0103,X
B33F BNE $B348
B341 LDA $46 ; Pointer: Index Variable for FOR/NEXT
B343 CMP $0102,X
B346 BEQ $B34F
B348 iB348 TXA
B349 CLC
B34A ADC #$12
B34C TAX
B34D BNE $B327
B34F iB34F RTS
; bltu Open Space in Memory
B350 iB350 JSR $B3A0 ; reason Check Memory Overlap
B353 STA $2E ; Pointer End of BASIC Arrays (+1)
B355 STY $2F
B357 SEC
B358 LDA $57
B35A SBC $5C
B35C STA $1F ; Utility Pointer Area
B35E TAY
B35F LDA $58
B361 SBC $5D
B363 TAX
B364 INX
B365 TYA
B366 BEQ $B38B
B368 LDA $57
B36A SEC
B36B SBC $1F ; Utility Pointer Area
B36D STA $57
B36F BCS $B374
B371 DEC $58
B373 SEC
B374 iB374 LDA $55
B376 SBC $1F ; Utility Pointer Area
B378 STA $55
B37A BCS $B384
B37C DEC $56
B37E BCC $B384
B380 iB380 LDA ($57),Y
B382 STA ($55),Y
B384 iB384 DEY
B385 BNE $B380
B387 LDA ($57),Y
B389 STA ($55),Y
B38B iB38B DEC $58
B38D DEC $56
B38F DEX
B390 BNE $B384
B392 RTS
; getstk Check Stack Depth
B393 iB393 ASL
B394 ADC #$3E
B396 BCS $B3CD ; omerr Output ?OUT OF MEMORY Error
B398 STA $1F ; Utility Pointer Area
B39A TSX
B39B CPX $1F ; Utility Pointer Area
B39D BCC $B3CD ; omerr Output ?OUT OF MEMORY Error
B39F RTS
; reason Check Memory Overlap
B3A0 iB3A0 CPY $31
B3A2 BCC $B3CC
B3A4 BNE $B3AA
B3A6 CMP $30 ; Pointer: Bottom of String Storage
B3A8 BCC $B3CC
B3AA iB3AA PHA
B3AB LDX #$09
B3AD TYA
B3AE iB3AE PHA
B3AF LDA $54,X ; Temporary storage for FLPT value.
B3B1 DEX
B3B2 BPL $B3AE
B3B4 JSR $C66A ; garbag Garbage Collection
B3B7 LDX #$F7
B3B9 iB3B9 PLA
B3BA STA $5E,X ; Floating-Point Accumulator #1: Exponent
B3BC INX
B3BD BMI $B3B9
B3BF PLA
B3C0 TAY
B3C1 PLA
B3C2 CPY $31
B3C4 BCC $B3CC
B3C6 BNE $B3CD ; omerr Output ?OUT OF MEMORY Error
B3C8 CMP $30 ; Pointer: Bottom of String Storage
B3CA BCS $B3CD ; omerr Output ?OUT OF MEMORY Error
B3CC iB3CC RTS
; omerr Output ?OUT OF MEMORY Error
B3CD iB3CD LDX #$4D
; error Error Routine
B3CF iB3CF LDA $10 ; 3: width of source (unused - from TTY)
B3D1 BEQ $B3DA
B3D3 JSR $FFCC ; clrch Restore I/O Vector
B3D6 LDA #$00
B3D8 STA $10 ; 3: width of source (unused - from TTY)
B3DA iB3DA JSR $BADF ; crdo Output CR/LF
B3DD JSR $BB44 ; -Print '?'
B3E0 iB3E0 LDA $B20D,X ; errtab Error Message Table DATA
B3E3 PHA
B3E4 AND #$7F
B3E6 JSR $BB46 ; - Output Character in A
B3E9 INX
B3EA PLA
B3EB BPL $B3E0
B3ED iB3ED JSR $B60E
B3F0 LDA #$06
B3F2 LDY #$B3
; errfin Break Entry
B3F4 iB3F4 JSR $BB1D ; strout Output String
B3F7 LDY $37
B3F9 INY
B3FA BEQ $B3FF ; ready Restart BASIC
B3FC JSR $CF78 ; inprt Output 'IN' and Line Number
; ready Restart BASIC
B3FF iB3FF LDA #$12
B401 LDY #$B3
B403 JSR $BB1D ; strout Output String
; main Input & Identify BASIC Line
B406 iB406 JSR $B4E2 ; inlin Input Line Into Buffer
B409 STX $77 ; Pointer: Current Byte of BASIC Text
B40B STY $78
B40D JSR $0070 ; Subroutine: Get Next Byte of BASIC Text
B410 TAX
B411 BEQ $B406 ; main Input & Identify BASIC Line
B413 LDX #$FF
B415 STX $37
B417 BCC $B41F ; main1 Get Line Number & Tokenise Text
B419 JSR $B4FB ; crunch Tokenise Input Buffer
B41C JMP $B77C ; gone Prepare to execute statement
; main1 Get Line Number & Tokenise Text
B41F iB41F JSR $B8F6 ; linget Fetch linnum From BASIC
B422 JSR $B4FB ; crunch Tokenise Input Buffer
; inslin Insert BASIC Text
B425 STY $05 ; Input Buffer Pointer / No. of Subscripts
B427 JSR $B5A3 ; fndlin Search for Line Number
B42A BCC $B470
B42C LDY #$01
B42E LDA ($5C),Y
B430 STA $20
B432 LDA $2A ; Pointer: Start of BASIC Variables
B434 STA $1F ; Utility Pointer Area
B436 LDA $5D
B438 STA $22
B43A LDA $5C
B43C DEY
B43D SBC ($5C),Y
B43F CLC
B440 ADC $2A ; Pointer: Start of BASIC Variables
B442 STA $2A ; Pointer: Start of BASIC Variables
B444 STA $21
B446 LDA $2B
B448 ADC #$FF
B44A STA $2B
B44C SBC $5D
B44E TAX
B44F SEC
B450 LDA $5C
B452 SBC $2A ; Pointer: Start of BASIC Variables
B454 TAY
B455 BCS $B45A
B457 INX
B458 DEC $22
B45A iB45A CLC
B45B ADC $1F ; Utility Pointer Area
B45D BCC $B462
B45F DEC $20
B461 CLC
B462 iB462 LDA ($1F),Y ; Utility Pointer Area
B464 STA ($21),Y
B466 INY
B467 BNE $B462
B469 INC $20
B46B INC $22
B46D DEX
B46E BNE $B462
B470 iB470 JSR $B5E9
B473 JSR $B4B6 ; linkprg Rechain Lines
B476 LDA $0200 ; System INPUT Buffer
B479 BEQ $B406 ; main Input & Identify BASIC Line
B47B CLC
B47C LDA $2A ; Pointer: Start of BASIC Variables
B47E STA $57
B480 ADC $05 ; Input Buffer Pointer / No. of Subscripts
B482 STA $55
B484 LDY $2B
B486 STY $58
B488 BCC $B48B
B48A INY
B48B iB48B STY $56
B48D JSR $B350 ; bltu Open Space in Memory
B490 LDA $11 ; Temp: Integer Value
B492 LDY $12
B494 STA $01FE
B497 STY $01FF
B49A LDA $2E ; Pointer End of BASIC Arrays (+1)
B49C LDY $2F
B49E STA $2A ; Pointer: Start of BASIC Variables
B4A0 STY $2B
B4A2 LDY $05 ; Input Buffer Pointer / No. of Subscripts
B4A4 DEY
B4A5 iB4A5 LDA $01FC,Y
B4A8 STA ($5C),Y
B4AA DEY
B4AB BPL $B4A5
B4AD iB4AD JSR $B5E9
B4B0 JSR $B4B6 ; linkprg Rechain Lines
B4B3 JMP $B406 ; main Input & Identify BASIC Line
; linkprg Rechain Lines
B4B6 iB4B6 LDA $28 ; Pointer: Start of BASIC Text [0401]
B4B8 LDY $29
B4BA STA $1F ; Utility Pointer Area
B4BC STY $20
B4BE CLC
B4BF iB4BF LDY #$01
B4C1 LDA ($1F),Y ; Utility Pointer Area
B4C3 BEQ $B4E1
B4C5 LDY #$04
B4C7 iB4C7 INY
B4C8 LDA ($1F),Y ; Utility Pointer Area
B4CA BNE $B4C7
B4CC INY
B4CD TYA
B4CE ADC $1F ; Utility Pointer Area
B4D0 TAX
B4D1 LDY #$00
B4D3 STA ($1F),Y ; Utility Pointer Area
B4D5 TYA
B4D6 ADC $20
B4D8 INY
B4D9 STA ($1F),Y ; Utility Pointer Area
B4DB STX $1F ; Utility Pointer Area
B4DD STA $20
B4DF BCC $B4BF
B4E1 iB4E1 RTS
; inlin Input Line Into Buffer
B4E2 iB4E2 LDX #$00
B4E4 iB4E4 JSR $FFCF ; chrin Input Vector, chrin
B4E7 CMP #$0D
B4E9 BEQ $B4F8
B4EB STA $0200,X ; System INPUT Buffer
B4EE INX
B4EF CPX #$51
B4F1 BNE $B4E4
B4F3 LDX #$B0
B4F5 JMP $B3CF ; error Error Routine
B4F8 iB4F8 JMP $BAD2 ; - Add zero terminator to string
; crunch Tokenise Input Buffer
B4FB iB4FB LDX $77 ; Pointer: Current Byte of BASIC Text
B4FD LDY #$04
B4FF STY $09 ; Flag: DATA scan/LlST quote/Garbage Coll
B501 iB501 LDA $0200,X ; System INPUT Buffer
B504 BPL $B50D
B506 CMP #$FF
B508 BEQ $B554
B50A INX
B50B BNE $B501
B50D iB50D CMP #$20
B50F BEQ $B554
B511 STA $04 ; Flag: Scan for Quote at End of String
B513 CMP #$22
B515 BEQ $B579
B517 BIT $09
B519 BVS $B554
B51B CMP #$3F
B51D BNE $B523
B51F LDA #$99
B521 BNE $B554
B523 iB523 CMP #$30
B525 BCC $B52B
B527 CMP #$3C
B529 BCC $B554
B52B iB52B STY $6E ; Pointer: Cassette Buffer
B52D LDY #$00
B52F STY $05 ; Input Buffer Pointer / No. of Subscripts
B531 STX $77 ; Pointer: Current Byte of BASIC Text
B533 LDA #$B0
B535 STA $20
B537 LDA #$B2
B539 STA $1F ; Utility Pointer Area
B53B BNE $B544
B53D iB53D INX
B53E INC $1F ; Utility Pointer Area
B540 BNE $B544
B542 INC $20
B544 iB544 LDA $0200,X ; System INPUT Buffer
B547 SEC
B548 SBC ($1F),Y ; Utility Pointer Area
B54A BEQ $B53D
B54C CMP #$80
B54E BNE $B580
B550 ORA $05 ; Input Buffer Pointer / No. of Subscripts
B552 iB552 LDY $6E ; Pointer: Cassette Buffer
B554 iB554 INX
B555 INY
B556 STA $01FB,Y
B559 LDA $01FB,Y
B55C BEQ $B599
B55E SEC
B55F SBC #$3A
B561 BEQ $B567
B563 CMP #$49
B565 BNE $B569
B567 iB567 STA $09 ; Flag: DATA scan/LlST quote/Garbage Coll
B569 iB569 SEC
B56A SBC #$55
B56C BNE $B501
B56E STA $04 ; Flag: Scan for Quote at End of String
B570 iB570 LDA $0200,X ; System INPUT Buffer
B573 BEQ $B554
B575 CMP $04 ; Flag: Scan for Quote at End of String
B577 BEQ $B554
B579 iB579 INY
B57A STA $01FB,Y
B57D INX
B57E BNE $B570
B580 iB580 LDX $77 ; Pointer: Current Byte of BASIC Text
B582 INC $05 ; Input Buffer Pointer / No. of Subscripts
B584 iB584 LDA ($1F),Y ; Utility Pointer Area
B586 PHP
B587 INC $1F ; Utility Pointer Area
B589 BNE $B58D
B58B INC $20
B58D iB58D PLP
B58E BPL $B584
B590 LDA ($1F),Y ; Utility Pointer Area
B592 BNE $B544
B594 LDA $0200,X ; System INPUT Buffer
B597 BPL $B552
B599 iB599 STA $01FD,Y
B59C DEC $78
B59E LDA #$FF
B5A0 STA $77 ; Pointer: Current Byte of BASIC Text
B5A2 RTS
; fndlin Search for Line Number
B5A3 iB5A3 LDA $28 ; Pointer: Start of BASIC Text [0401]
B5A5 LDX $29
B5A7 iB5A7 LDY #$01
B5A9 STA $5C
B5AB STX $5D
B5AD LDA ($5C),Y
B5AF BEQ $B5D0
B5B1 INY
B5B2 INY
B5B3 LDA $12
B5B5 CMP ($5C),Y
B5B7 BCC $B5D1
B5B9 BEQ $B5BE
B5BB DEY
B5BC BNE $B5C7
B5BE iB5BE LDA $11 ; Temp: Integer Value
B5C0 DEY
B5C1 CMP ($5C),Y
B5C3 BCC $B5D1
B5C5 BEQ $B5D1
B5C7 iB5C7 DEY
B5C8 LDA ($5C),Y
B5CA TAX
B5CB DEY
B5CC LDA ($5C),Y
B5CE BCS $B5A7
B5D0 iB5D0 CLC
B5D1 iB5D1 RTS
; scrtch Perform [new]
B5D2 BNE $B5D1
B5D4 iB5D4 LDA #$00
B5D6 TAY
B5D7 STA ($28),Y ; Pointer: Start of BASIC Text [0401]
B5D9 INY
B5DA STA ($28),Y ; Pointer: Start of BASIC Text [0401]
B5DC LDA $28 ; Pointer: Start of BASIC Text [0401]
B5DE CLC
B5DF ADC #$02
B5E1 STA $2A ; Pointer: Start of BASIC Variables
B5E3 LDA $29
B5E5 ADC #$00
B5E7 STA $2B
B5E9 iB5E9 JSR $B622 ; stxpt Reset TXTPTR
B5EC LDA #$00
; clear Perform [clr]
B5EE BNE $B621
B5F0 iB5F0 LDA $34 ; Pointer: Highest Address Used by BASIC
B5F2 LDY $35
B5F4 STA $30 ; Pointer: Bottom of String Storage
B5F6 STY $31
B5F8 LDA #$00
B5FA STA $0D ; 3: Flag to suppress PRINT or PRINT# when -ve
B5FC JSR $FFE7 ; jmp $f2a2 clall Close All Channels And Files
B5FF LDA $2A ; Pointer: Start of BASIC Variables
B601 LDY $2B
B603 STA $2C ; Pointer: Start of BASIC Arrays
B605 STY $2D
B607 STA $2E ; Pointer End of BASIC Arrays (+1)
B609 STY $2F
B60B iB60B JSR $B7B7 ; restor Perform [restore]
B60E iB60E LDX #$16
B610 STX $13 ; Pointer Temporary String
B612 PLA
B613 TAY
B614 PLA
B615 LDX #$FA
B617 TXS
B618 PHA
B619 TYA
B61A PHA
B61B LDA #$00
B61D STA $3B
B61F STA $0A ; Flag: Subscript Ref / User Function Call
B621 iB621 RTS
; stxpt Reset TXTPTR
B622 iB622 CLC
B623 LDA $28 ; Pointer: Start of BASIC Text [0401]
B625 ADC #$FF
B627 STA $77 ; Pointer: Current Byte of BASIC Text
B629 LDA $29
B62B ADC #$FF
B62D STA $78
B62F RTS
; list Perform [list]
B630 BCC $B638
B632 BEQ $B638
B634 CMP #$AB
B636 BNE $B621
B638 iB638 JSR $B8F6 ; linget Fetch linnum From BASIC
B63B JSR $B5A3 ; fndlin Search for Line Number
B63E JSR $0076 ; Entry to Get Same Byte of Text Again
B641 BEQ $B64F
B643 CMP #$AB
B645 BNE $B5D1
B647 JSR $0070 ; Subroutine: Get Next Byte of BASIC Text
B64A JSR $B8F6 ; linget Fetch linnum From BASIC
B64D BNE $B5D1
B64F iB64F PLA
B650 PLA
B651 LDA $11 ; Temp: Integer Value
B653 ORA $12
B655 BNE $B65D
B657 LDA #$FF
B659 STA $11 ; Temp: Integer Value
B65B STA $12
B65D iB65D LDY #$01
B65F STY $09 ; Flag: DATA scan/LlST quote/Garbage Coll
B661 LDA ($5C),Y
B663 BEQ $B6A8
B665 JSR $FFE1 ; jmp $f343 stop Test-Stop
B668 JSR $BADF ; crdo Output CR/LF
B66B INY
B66C LDA ($5C),Y
B66E TAX
B66F INY
B670 LDA ($5C),Y
B672 CMP $12
B674 BNE $B67A
B676 CPX $11 ; Temp: Integer Value
B678 BEQ $B67C
B67A iB67A BCS $B6A8
B67C iB67C STY $46 ; Pointer: Index Variable for FOR/NEXT
B67E JSR $CF83
B681 LDA #$20
B683 iB683 LDY $46 ; Pointer: Index Variable for FOR/NEXT
B685 AND #$7F
B687 iB687 JSR $BB46 ; - Output Character in A
B68A CMP #$22
B68C BNE $B694
B68E LDA $09 ; Flag: DATA scan/LlST quote/Garbage Coll
B690 EOR #$FF
B692 STA $09 ; Flag: DATA scan/LlST quote/Garbage Coll
B694 iB694 INY
B695 BEQ $B6A8
B697 LDA ($5C),Y
B699 BNE $B6AB ; qplop Handle LIST Character
B69B TAY
B69C LDA ($5C),Y
B69E TAX
B69F INY
B6A0 LDA ($5C),Y
B6A2 STX $5C
B6A4 STA $5D
B6A6 BNE $B65D
B6A8 iB6A8 JMP $B3FF ; ready Restart BASIC
; qplop Handle LIST Character
B6AB iB6AB BPL $B687
B6AD CMP #$FF
B6AF BEQ $B687
B6B1 BIT $09
B6B3 BMI $B687
B6B5 TAX
B6B6 STY $46 ; Pointer: Index Variable for FOR/NEXT
B6B8 LDY #$B0
B6BA STY $20
B6BC LDY #$B2
B6BE STY $1F ; Utility Pointer Area
B6C0 LDY #$00
B6C2 ASL
B6C3 BEQ $B6D5
B6C5 iB6C5 DEX
B6C6 BPL $B6D4
B6C8 iB6C8 INC $1F ; Utility Pointer Area
B6CA BNE $B6CE
B6CC INC $20
B6CE iB6CE LDA ($1F),Y ; Utility Pointer Area
B6D0 BPL $B6C8
B6D2 BMI $B6C5
B6D4 iB6D4 INY
B6D5 iB6D5 LDA ($1F),Y ; Utility Pointer Area
B6D7 BMI $B683
B6D9 JSR $BB46 ; - Output Character in A
B6DC BNE $B6D4
; for Perform [for]
B6DE LDA #$80
B6E0 STA $0A ; Flag: Subscript Ref / User Function Call
B6E2 JSR $B930 ; let Perform [let]
B6E5 JSR $B322 ; fndfor Find FOR/GOSUB Entry on Stack
B6E8 BNE $B6EF
B6EA TXA
B6EB ADC #$0F
B6ED TAX
B6EE TXS
B6EF iB6EF PLA
B6F0 PLA
B6F1 LDA #$09
B6F3 JSR $B393 ; getstk Check Stack Depth
B6F6 JSR $B891 ; datan Search for Next Statement / Line
B6F9 CLC
B6FA TYA
B6FB ADC $77 ; Pointer: Current Byte of BASIC Text
B6FD PHA
B6FE LDA $78
B700 ADC #$00
B702 PHA
B703 LDA $37
B705 PHA
B706 LDA $36 ; Current BASIC Line Number
B708 PHA
B709 LDA #$A4
B70B JSR $BEF7 ; -Confirm Character in A
B70E JSR $BD87 ; -Confirm numeric mode
B711 JSR $BD84 ; frmnum Confirm Result
B714 LDA $63 ; Floating Accum. #1: Sign
B716 ORA #$7F
B718 AND $5F ; Floating Accum. #1: Mantissa
B71A STA $5F ; Floating Accum. #1: Mantissa
B71C LDA #$27
B71E LDY #$B7
B720 STA $1F ; Utility Pointer Area
B722 STY $20
B724 JMP $BE41
B727 LDA #$F2
B729 LDY #$CA
B72B JSR $CCD8 ; movfm Load FAC#1 From Memory
B72E JSR $0076 ; Entry to Get Same Byte of Text Again
B731 CMP #$A9
B733 BNE $B73B
B735 JSR $0070 ; Subroutine: Get Next Byte of BASIC Text
B738 JSR $BD84 ; frmnum Confirm Result
B73B iB73B JSR $CD61 ; sign Check Sign of FAC#1
B73E JSR $BE32
B741 LDA $47
B743 PHA
B744 LDA $46 ; Pointer: Index Variable for FOR/NEXT
B746 PHA
B747 LDA #$81
B749 PHA
; newstt BASIC Warm Start
B74A iB74A JSR $FFE1 ; jmp $f343 stop Test-Stop
B74D LDA $77 ; Pointer: Current Byte of BASIC Text
B74F LDY $78
B751 CPY #$02
B753 BEQ $B759
B755 STA $3A ; Pointer: BASIC Statement for CONT
B757 STY $3B
B759 iB759 LDY #$00
B75B LDA ($77),Y ; Pointer: Current Byte of BASIC Text
B75D BNE $B7A5
; ckeol Check End of Program
B75F LDY #$02
B761 LDA ($77),Y ; Pointer: Current Byte of BASIC Text
B763 CLC
B764 BNE $B769
B766 JMP $B7E2
B769 iB769 INY
B76A LDA ($77),Y ; Pointer: Current Byte of BASIC Text
B76C STA $36 ; Current BASIC Line Number
B76E INY
B76F LDA ($77),Y ; Pointer: Current Byte of BASIC Text
B771 STA $37
B773 TYA
B774 ADC $77 ; Pointer: Current Byte of BASIC Text
B776 STA $77 ; Pointer: Current Byte of BASIC Text
B778 BCC $B77C ; gone Prepare to execute statement
B77A INC $78
; gone Prepare to execute statement
B77C iB77C JSR $BF21 ; ?
B77F JSR $B785 ; gone3 Perform BASIC Keyword
B782 JMP $B74A ; newstt BASIC Warm Start
; gone3 Perform BASIC Keyword
B785 iB785 BEQ $B7C5
B787 iB787 SBC #$80
B789 BCC $B7A2
B78B CMP #$23
B78D BCC $B795
B78F CMP #$4B
B791 BCC $B7A9
B793 SBC #$28
B795 iB795 ASL
B796 TAY
B797 LDA $B001,Y
B79A PHA
B79B LDA $B000,Y ; 3: free space for 4K EPROM
B79E PHA
B79F JMP $0070 ; Subroutine: Get Next Byte of BASIC Text
B7A2 iB7A2 JMP $B930 ; let Perform [let]
B7A5 iB7A5 CMP #$3A
; - Perform [go]
B7A7 BEQ $B77C ; gone Prepare to execute statement
B7A9 iB7A9 JMP $BF00 ; synerr Output ?SYNTAX Error
B7AC JSR $0076 ; Entry to Get Same Byte of Text Again
B7AF LDA #$A4
B7B1 JSR $BEF7 ; -Confirm Character in A
B7B4 JMP $B830 ; goto Perform [goto]
; restor Perform [restore]
B7B7 iB7B7 SEC
B7B8 LDA $28 ; Pointer: Start of BASIC Text [0401]
B7BA SBC #$01
B7BC LDY $29
B7BE BCS $B7C1
B7C0 DEY
B7C1 iB7C1 STA $3E ; Pointer: Current DATA Item Address
B7C3 STY $3F
B7C5 iB7C5 RTS
; stop Perform [stop], [end], break
B7C6 iB7C6 BCS $B7C9
B7C8 CLC
B7C9 iB7C9 BNE $B807
B7CB LDA $77 ; Pointer: Current Byte of BASIC Text
B7CD LDY $78
B7CF LDX $37
B7D1 INX
B7D2 BEQ $B7E0
B7D4 STA $3A ; Pointer: BASIC Statement for CONT
B7D6 STY $3B
B7D8 iB7D8 LDA $36 ; Current BASIC Line Number
B7DA LDY $37
B7DC STA $38 ; Previous BASIC Line Number
B7DE STY $39
B7E0 iB7E0 PLA
B7E1 PLA
B7E2 iB7E2 LDA #$1B
B7E4 LDY #$B3
B7E6 BCC $B7EB
B7E8 JMP $B3F4 ; errfin Break Entry
B7EB iB7EB JMP $B3FF ; ready Restart BASIC
; cont Perform [cont]
B7EE BNE $B807
B7F0 LDX #$DB
B7F2 LDY $3B
B7F4 BNE $B7F9
B7F6 JMP $B3CF ; error Error Routine
B7F9 iB7F9 LDA $3A ; Pointer: BASIC Statement for CONT
B7FB STA $77 ; Pointer: Current Byte of BASIC Text
B7FD STY $78
B7FF LDA $38 ; Previous BASIC Line Number
B801 LDY $39
B803 STA $36 ; Current BASIC Line Number
B805 STY $37
B807 iB807 RTS
; run Perform [run]
B808 BNE $B80D
B80A JMP $B5E9
B80D iB80D JSR $B5F0
B810 JMP $B827
; gosub Perform [gosub]
B813 LDA #$03
B815 JSR $B393 ; getstk Check Stack Depth
B818 LDA $78
B81A PHA
B81B LDA $77 ; Pointer: Current Byte of BASIC Text
B81D PHA
B81E LDA $37
B820 PHA
B821 LDA $36 ; Current BASIC Line Number
B823 PHA
B824 LDA #$8D
B826 PHA
B827 iB827 JSR $0076 ; Entry to Get Same Byte of Text Again
B82A JSR $B830 ; goto Perform [goto]
B82D JMP $B74A ; newstt BASIC Warm Start
; goto Perform [goto]
B830 iB830 JSR $B8F6 ; linget Fetch linnum From BASIC
B833 JSR $B894
B836 LDA $37
B838 CMP $12
B83A BCS $B847
B83C TYA
B83D SEC
B83E ADC $77 ; Pointer: Current Byte of BASIC Text
B840 LDX $78
B842 BCC $B84B
B844 INX
B845 BCS $B84B
B847 iB847 LDA $28 ; Pointer: Start of BASIC Text [0401]
B849 LDX $29
B84B iB84B JSR $B5A7
B84E BCC $B86E
B850 LDA $5C
B852 SBC #$01
B854 STA $77 ; Pointer: Current Byte of BASIC Text
B856 LDA $5D
B858 SBC #$00
B85A STA $78
B85C iB85C RTS
; return Perform [return]
B85D BNE $B85C
B85F LDA #$FF
B861 STA $47
B863 JSR $B322 ; fndfor Find FOR/GOSUB Entry on Stack
B866 TXS
B867 CMP #$8D
B869 BEQ $B876
B86B LDX #$16
B86D BIT $5AA2
; *** B86D: ADDRESS DIFFER. This may indicate misassembly ***
B870 JMP $B3CF ; error Error Routine
B873 iB873 JMP $BF00 ; synerr Output ?SYNTAX Error
B876 iB876 PLA
B877 PLA
B878 STA $36 ; Current BASIC Line Number
B87A PLA
B87B STA $37
B87D PLA
B87E STA $77 ; Pointer: Current Byte of BASIC Text
B880 PLA
B881 STA $78
; data Perform [data]
B883 iB883 JSR $B891 ; datan Search for Next Statement / Line
B886 iB886 TYA
B887 CLC
B888 ADC $77 ; Pointer: Current Byte of BASIC Text
B88A STA $77 ; Pointer: Current Byte of BASIC Text
B88C BCC $B890
B88E INC $78
B890 iB890 RTS
; datan Search for Next Statement / Line
B891 iB891 LDX #$3A
B893 BIT $00A2
; *** B893: ADDRESS DIFFER. This may indicate misassembly ***
B896 STX $03 ; Search Character
B898 LDY #$00
B89A STY $04 ; Flag: Scan for Quote at End of String
B89C iB89C LDA $04 ; Flag: Scan for Quote at End of String
B89E LDX $03 ; Search Character
B8A0 STA $03 ; Search Character
B8A2 STX $04 ; Flag: Scan for Quote at End of String
B8A4 iB8A4 LDA ($77),Y ; Pointer: Current Byte of BASIC Text
B8A6 BEQ $B890
B8A8 CMP $04 ; Flag: Scan for Quote at End of String
B8AA BEQ $B890
B8AC INY
B8AD CMP #$22
B8AF BNE $B8A4
B8B1 BEQ $B89C
; if Perform [if]
B8B3 JSR $BD98 ; frmevl Evaluate Expression in Text
B8B6 JSR $0076 ; Entry to Get Same Byte of Text Again
B8B9 CMP #$89
B8BB BEQ $B8C2
B8BD LDA #$A7
B8BF JSR $BEF7 ; -Confirm Character in A
B8C2 iB8C2 LDA $5E ; Floating-Point Accumulator #1: Exponent
B8C4 BNE $B8CB
; rem Perform [rem]
B8C6 JSR $B894
B8C9 BEQ $B886
B8CB iB8CB JSR $0076 ; Entry to Get Same Byte of Text Again
B8CE BCS $B8D3
B8D0 JMP $B830 ; goto Perform [goto]
B8D3 iB8D3 JMP $B785 ; gone3 Perform BASIC Keyword
; ongoto Perform [on]
B8D6 JSR $C8D4 ; -Eval Byte Parameter
B8D9 PHA
B8DA CMP #$8D
B8DC BEQ $B8E2
B8DE iB8DE CMP #$89
B8E0 BNE $B873
B8E2 iB8E2 DEC $62
B8E4 BNE $B8EA
B8E6 PLA
B8E7 JMP $B787
B8EA iB8EA JSR $0070 ; Subroutine: Get Next Byte of BASIC Text
B8ED JSR $B8F6 ; linget Fetch linnum From BASIC
B8F0 CMP #$2C
B8F2 BEQ $B8E2
B8F4 PLA
B8F5 iB8F5 RTS
; linget Fetch linnum From BASIC
B8F6 iB8F6 LDX #$00
B8F8 STX $11 ; Temp: Integer Value
B8FA STX $12
B8FC iB8FC BCS $B8F5
B8FE SBC #$2F
B900 STA $03 ; Search Character
B902 LDA $12
B904 STA $1F ; Utility Pointer Area
B906 CMP #$19
B908 BCS $B8DE
B90A LDA $11 ; Temp: Integer Value
B90C ASL
B90D ROL $1F ; Utility Pointer Area
B90F ASL
B910 ROL $1F ; Utility Pointer Area
B912 ADC $11 ; Temp: Integer Value
B914 STA $11 ; Temp: Integer Value
B916 LDA $1F ; Utility Pointer Area
B918 ADC $12
B91A STA $12
B91C ASL $11 ; Temp: Integer Value
B91E ROL $12
B920 LDA $11 ; Temp: Integer Value
B922 ADC $03 ; Search Character
B924 STA $11 ; Temp: Integer Value
B926 BCC $B92A
B928 INC $12
B92A iB92A JSR $0070 ; Subroutine: Get Next Byte of BASIC Text
B92D JMP $B8FC
; let Perform [let]
B930 iB930 JSR $C12B ; ptrget Identify Variable
B933 STA $46 ; Pointer: Index Variable for FOR/NEXT
B935 STY $47
B937 LDA #$B2
B939 JSR $BEF7 ; -Confirm Character in A
B93C LDA $08 ; Data Type: $80 = Integer, $00 = Floating
B93E PHA
B93F LDA $07 ; Data Type: $FF = String, $00 = Numeric
B941 PHA
B942 JSR $BD98 ; frmevl Evaluate Expression in Text
B945 PLA
B946 ROL
B947 JSR $BD8A
B94A BNE $B964 ; putstr Assign String
B94C PLA
B94D iB94D BPL $B961 ; ptflpt Assign Floating Point
; putint Assign Integer
B94F JSR $CD51 ; round Round FAC#1
B952 JSR $C2EA ; ayint FAC#1 to Positive Integer
B955 LDY #$00
B957 LDA $61
B959 STA ($46),Y ; Pointer: Index Variable for FOR/NEXT
B95B INY
B95C LDA $62
B95E STA ($46),Y ; Pointer: Index Variable for FOR/NEXT
B960 RTS
; ptflpt Assign Floating Point
B961 iB961 JMP $CD06
; putstr Assign String
B964 iB964 PLA
B965 iB965 LDY $47
B967 CPY #$D0
B969 BNE $B9BA ; getspt Add Digit to FAC#1
B96B JSR $C7B8
; puttim Assign TI$
B96E CMP #$06
B970 BNE $B9B2
B972 LDY #$00
B974 STY $5E ; Floating-Point Accumulator #1: Exponent
B976 STY $63 ; Floating Accum. #1: Sign
B978 iB978 STY $6E ; Pointer: Cassette Buffer
B97A JSR $B9AB ; -get character string
B97D JSR $CC18 ; mul10 Multiply FAC#1 by 10
B980 INC $6E ; Pointer: Cassette Buffer
B982 LDY $6E ; Pointer: Cassette Buffer
B984 JSR $B9AB ; -get character string
B987 JSR $CD42 ; movaf Copy FAC#1 into FAC#2
B98A TAX
B98B BEQ $B992
B98D INX
B98E TXA
B98F JSR $CC23
B992 iB992 LDY $6E ; Pointer: Cassette Buffer
B994 INY
B995 CPY #$06
B997 BNE $B978
B999 JSR $CC18 ; mul10 Multiply FAC#1 by 10
B99C JSR $CDD1 ; qint Convert FAC#1 to Integer
B99F LDX #$02
B9A1 SEI
B9A2 iB9A2 LDA $60,X
B9A4 STA $8D,X ; Real-Time Jiffy Clock (approx) 1/60 Sec
B9A6 DEX
B9A7 BPL $B9A2
B9A9 CLI
B9AA RTS
; -get character string
B9AB iB9AB LDA ($1F),Y ; Utility Pointer Area
B9AD JSR $007D
B9B0 BCC $B9B5
B9B2 iB9B2 JMP $C373 ; - ?ILLEGAL QUANTITY
B9B5 iB9B5 SBC #$2F
B9B7 JMP $CEB4
; getspt Add Digit to FAC#1
B9BA iB9BA LDY #$02
B9BC LDA ($61),Y
B9BE CMP $0F ; 3: terminal width (unused-carried over from TTY)
B9C0 BNE $B9D4
B9C2 PHA
B9C3 DEY
B9C4 LDA $0D ; 3: Flag to suppress PRINT or PRINT# when -ve
B9C6 BEQ $B9D2
B9C8 LDA ($61),Y
B9CA CMP $0E ; 3: File# of current I/O device (as 0010)
B9CC BNE $B9D2
B9CE PLA
B9CF JMP $B9F6
B9D2 iB9D2 PLA
B9D3 INY
B9D4 iB9D4 CMP $31
B9D6 BCC $B9EF
B9D8 BNE $B9E1
B9DA DEY
B9DB LDA ($61),Y
B9DD CMP $30 ; Pointer: Bottom of String Storage
B9DF BCC $B9EF
B9E1 iB9E1 LDY $62
B9E3 CPY $2B
B9E5 BCC $B9EF
B9E7 BNE $B9F6
B9E9 LDA $61
B9EB CMP $2A ; Pointer: Start of BASIC Variables
B9ED BCS $B9F6
B9EF iB9EF LDA $61
B9F1 LDY $62
B9F3 JMP $BA13
B9F6 iB9F6 LDY #$00
B9F8 LDA ($61),Y
B9FA JSR $C59E
B9FD LDA $4D ; Pointer to string, length and garbage collect constant
B9FF LDY $4E
BA01 STA $6C ; Sign Comparison Result: Accum. # 1 vs #2
BA03 STY $6D ; Floating Accum. #1. Low-Order (Rounding)
BA05 JSR $C78C ; movins Store String in High RAM
BA08 LDA $6C ; Sign Comparison Result: Accum. # 1 vs #2
BA0A LDY $6D ; Floating Accum. #1. Low-Order (Rounding)
BA0C JSR $C811 ; frefac Clean Descriptor Stack
BA0F LDA #$5E
BA11 LDY #$00
BA13 iBA13 STA $4D ; Pointer to string, length and garbage collect constant
BA15 STY $4E
BA17 STA $1F ; Utility Pointer Area
BA19 STY $20
BA1B JSR $C811 ; frefac Clean Descriptor Stack
BA1E JSR $BA4E ; ?
BA21 BCC $BA2E
BA23 LDY #$00
BA25 LDA $46 ; Pointer: Index Variable for FOR/NEXT
BA27 STA ($1F),Y ; Utility Pointer Area
BA29 INY
BA2A LDA $47
BA2C STA ($1F),Y ; Utility Pointer Area
BA2E iBA2E LDA $46 ; Pointer: Index Variable for FOR/NEXT
BA30 STA $1F ; Utility Pointer Area
BA32 LDA $47
BA34 STA $20
BA36 JSR $BA4E ; ?
BA39 BCC $BA44
BA3B DEY
BA3C LDA #$FF
BA3E STA ($1F),Y ; Utility Pointer Area
BA40 DEY
BA41 TXA
BA42 STA ($1F),Y ; Utility Pointer Area
BA44 iBA44 LDY #$02
BA46 iBA46 LDA ($4D),Y ; Pointer to string, length and garbage collect constant
BA48 STA ($46),Y ; Pointer: Index Variable for FOR/NEXT
BA4A DEY
BA4B BPL $BA46
BA4D RTS
; ?
BA4E iBA4E LDY #$00
BA50 LDA ($1F),Y ; Utility Pointer Area
BA52 PHA
BA53 BEQ $BA85
BA55 INY
BA56 LDA ($1F),Y ; Utility Pointer Area
BA58 TAX
BA59 INY
BA5A LDA ($1F),Y ; Utility Pointer Area
BA5C BMI $BA85
BA5E CMP #$B0
BA60 BCS $BA85
BA62 CMP $31
BA64 BCC $BA85
BA66 BNE $BA6C
BA68 CPX $30 ; Pointer: Bottom of String Storage
BA6A BCC $BA85
BA6C iBA6C JMP $BF10
BA6F NOP
BA70 iBA70 CPX $0E ; 3: File# of current I/O device (as 0010)
BA72 BEQ $BA85
BA74 iBA74 STX $1F ; Utility Pointer Area
BA76 STA $20
BA78 PLA
BA79 TAX
BA7A CLC
BA7B ADC $1F ; Utility Pointer Area
BA7D STA $1F ; Utility Pointer Area
BA7F BCC $BA83
BA81 INC $20
BA83 iBA83 SEC
BA84 RTS
BA85 iBA85 PLA
BA86 CLC
BA87 RTS
; printn Perform [print#]
BA88 JSR $BA8E ; cmd Perform [cmd]
BA8B JMP $BBB4
; cmd Perform [cmd]
BA8E iBA8E JSR $C8D4 ; -Eval Byte Parameter
BA91 BEQ $BA98
BA93 LDA #$2C
BA95 JSR $BEF7 ; -Confirm Character in A
BA98 iBA98 PHP
BA99 JSR $FFC9 ; chkout Set Output
BA9C STX $10 ; 3: width of source (unused - from TTY)
BA9E PLP
BA9F JMP $BAA8 ; print Perform [print]
; strdon Print String From Memory
BAA2 iBAA2 JSR $BB20
BAA5 iBAA5 JSR $0076 ; Entry to Get Same Byte of Text Again
; print Perform [print]
BAA8 iBAA8 BEQ $BADF ; crdo Output CR/LF
BAAA iBAAA BEQ $BAEF
BAAC CMP #$A3
BAAE BEQ $BAFD
BAB0 CMP #$A6
BAB2 CLC
BAB3 BEQ $BAFD
BAB5 CMP #$2C
BAB7 BEQ $BAF0 ; comprt Handle comma, TAB(, SPC(
BAB9 CMP #$3B
BABB BEQ $BB12
BABD JSR $BD98 ; frmevl Evaluate Expression in Text
; varop Output Variable
BAC0 BIT $07
BAC2 BMI $BAA2 ; strdon Print String From Memory
BAC4 JSR $CF93 ; fout Convert FAC#1 to ASCII String
BAC7 JSR $C5B0 ; strlit Set Up String
BACA JSR $BB20
BACD JSR $BB3A ; outspc Output Format Character
BAD0 BNE $BAA5
; - Add zero terminator to string
BAD2 iBAD2 LDA #$00
BAD4 STA $0200,X ; System INPUT Buffer
BAD7 LDX #$FF
BAD9 LDY #$01
BADB LDA $10 ; 3: width of source (unused - from TTY)
BADD BNE $BAEF
; crdo Output CR/LF
BADF iBADF LDA #$0D
BAE1 JSR $BB46 ; - Output Character in A
BAE4 LDA $10 ; 3: width of source (unused - from TTY)
BAE6 BPL $BAED
BAE8 LDA #$0A
BAEA JSR $BB46 ; - Output Character in A
BAED iBAED EOR #$FF
BAEF iBAEF RTS
; comprt Handle comma, TAB(, SPC(
BAF0 iBAF0 LDA $C6 ; Cursor Column on Current Line
BAF2 SEC
BAF3 iBAF3 SBC #$0A
BAF5 BCS $BAF3
BAF7 EOR #$FF
BAF9 ADC #$01
BAFB BNE $BB0D
BAFD iBAFD PHP
BAFE JSR $C8D1 ; gtbytc Evaluate Text to 1 Byte in XR
BB01 CMP #$29
BB03 BNE $BB5E
BB05 PLP
BB06 BCC $BB0E
BB08 TXA
BB09 SBC $C6 ; Cursor Column on Current Line
BB0B BCC $BB12
BB0D iBB0D TAX
BB0E iBB0E INX
BB0F iBB0F DEX
BB10 BNE $BB18
BB12 iBB12 JSR $0070 ; Subroutine: Get Next Byte of BASIC Text
BB15 JMP $BAAA
BB18 iBB18 JSR $BB3A ; outspc Output Format Character
BB1B BNE $BB0F
; strout Output String
BB1D iBB1D JSR $C5B0 ; strlit Set Up String
BB20 iBB20 JSR $C7B8
BB23 TAX
BB24 LDY #$00
BB26 INX
BB27 iBB27 DEX
BB28 BEQ $BAEF
BB2A LDA ($1F),Y ; Utility Pointer Area
BB2C JSR $BB46 ; - Output Character in A
BB2F INY
BB30 CMP #$0D
BB32 BNE $BB27
BB34 JSR $BAED
BB37 JMP $BB27
; outspc Output Format Character
BB3A iBB3A LDA $10 ; 3: width of source (unused - from TTY)
BB3C BEQ $BB41 ; -Print '<cursor right>'
BB3E LDA #$20
BB40 BIT $1DA9
; *** Resyncing ***
; -Print '<cursor right>'
BB41 iBB41 LDA #$1D
BB43 BIT $3FA9
; *** Resyncing ***
; -Print '?'
BB44 iBB44 LDA #$3F
; - Output Character in A
BB46 iBB46 JSR $FFD2 ; chrout Output Vector, chrout
BB49 AND #$FF
BB4B RTS
; doagin Handle Bad Data
BB4C iBB4C LDA $0B ; Flag: $00 = INPUT, $40 = GET, $98 = READ
BB4E BEQ $BB61
BB50 BMI $BB56
BB52 LDY #$FF
BB54 BNE $BB5A
BB56 iBB56 LDA $3C ; Current DATA Line Number
BB58 LDY $3D
BB5A iBB5A STA $36 ; Current BASIC Line Number
BB5C STY $37
BB5E iBB5E JMP $BF00 ; synerr Output ?SYNTAX Error
BB61 iBB61 LDA $10 ; 3: width of source (unused - from TTY)
BB63 BEQ $BB6A
BB65 LDX #$BF
BB67 JMP $B3CF ; error Error Routine
BB6A iBB6A LDA #$07
BB6C LDY #$BD
BB6E JSR $BB1D ; strout Output String
BB71 LDA $3A ; Pointer: BASIC Statement for CONT
BB73 LDY $3B
BB75 STA $77 ; Pointer: Current Byte of BASIC Text
BB77 STY $78
BB79 RTS
; get Perform [get]
BB7A JSR $C4CF ; errdir Confirm Program Mode
BB7D CMP #$23
BB7F BNE $BB91
BB81 JSR $0070 ; Subroutine: Get Next Byte of BASIC Text
BB84 JSR $C8D4 ; -Eval Byte Parameter
BB87 LDA #$2C
BB89 JSR $BEF7 ; -Confirm Character in A
BB8C JSR $FFC6 ; chkin Set Input
BB8F STX $10 ; 3: width of source (unused - from TTY)
BB91 iBB91 LDX #$01
BB93 LDY #$02
BB95 LDA #$00
BB97 STA $0201
BB9A LDA #$40
BB9C JSR $BC0B
BB9F LDX $10 ; 3: width of source (unused - from TTY)
BBA1 BNE $BBB6
BBA3 RTS
; inputn Perform [input#]
BBA4 JSR $C8D4 ; -Eval Byte Parameter
BBA7 LDA #$2C
BBA9 JSR $BEF7 ; -Confirm Character in A
BBAC JSR $FFC6 ; chkin Set Input
BBAF STX $10 ; 3: width of source (unused - from TTY)
BBB1 JSR $BBCD
BBB4 iBBB4 LDA $10 ; 3: width of source (unused - from TTY)
BBB6 iBBB6 JSR $FFCC ; clrch Restore I/O Vector
BBB9 LDX #$00
BBBB STX $10 ; 3: width of source (unused - from TTY)
BBBD RTS
; input Perform [input]
BBBE CMP #$22
BBC0 BNE $BBCD
BBC2 JSR $BEB5
BBC5 LDA #$3B
BBC7 JSR $BEF7 ; -Confirm Character in A
BBCA JSR $BB20
BBCD iBBCD JSR $C4CF ; errdir Confirm Program Mode
BBD0 LDA #$2C
BBD2 STA $01FF
BBD5 iBBD5 JSR $BBF5 ; qinlin Do Input Prompt
BBD8 LDA $10 ; 3: width of source (unused - from TTY)
BBDA BEQ $BBE8 ; bufful Read Input Buffer
BBDC LDA $96 ; Kernal I/O Status Word: ST
BBDE AND #$03
BBE0 BEQ $BBE8 ; bufful Read Input Buffer
BBE2 JSR $BBB4
BBE5 JMP $B883 ; data Perform [data]
; bufful Read Input Buffer
; Bufful scans for a null input and calls DATA to skip to the next statement
; On old PETs, END was called, thereby crashing the program.
BBE8 iBBE8 LDA $0200 ; System INPUT Buffer
BBEB BNE $BC09
BBED JMP $BF2E ; Patch for [input]
BBF0 NOP
BBF1 iBBF1 CLC
BBF2 JMP $B7D8
; qinlin Do Input Prompt
BBF5 iBBF5 LDA $10 ; 3: width of source (unused - from TTY)
BBF7 BNE $BBFF
BBF9 JSR $BB44 ; -Print '?'
BBFC JSR $BB3A ; outspc Output Format Character
BBFF iBBFF JMP $B4E2 ; inlin Input Line Into Buffer
; read Perform [read]
BC02 LDX $3E ; Pointer: Current DATA Item Address
BC04 LDY $3F
BC06 LDA #$98
BC08 BIT $00A9
; *** BC08: ADDRESS DIFFER. This may indicate misassembly ***
BC0B iBC0B STA $0B ; Flag: $00 = INPUT, $40 = GET, $98 = READ
BC0D STX $40 ; INPUT, READ and GET vector to save CHRGET
BC0F STY $41
BC11 iBC11 JSR $C12B ; ptrget Identify Variable
BC14 STA $46 ; Pointer: Index Variable for FOR/NEXT
BC16 STY $47
BC18 LDA $77 ; Pointer: Current Byte of BASIC Text
BC1A LDY $78
BC1C STA $48 ; Y-save; op-save; Temporary storage for TXTPTR
BC1E STY $49
BC20 LDX $40 ; INPUT, READ and GET vector to save CHRGET
BC22 LDY $41
BC24 STX $77 ; Pointer: Current Byte of BASIC Text
BC26 STY $78
BC28 JSR $0076 ; Entry to Get Same Byte of Text Again
BC2B BNE $BC4D
BC2D BIT $0B
BC2F BVC $BC3D
; rdget General Purpose Read Routine
BC31 JSR $FFE4 ; jmp $f205 getin Get From Keyboad
BC34 STA $0200 ; System INPUT Buffer
BC37 LDX #$FF
BC39 LDY #$01
BC3B BNE $BC49
BC3D iBC3D BMI $BCB4
BC3F LDA $10 ; 3: width of source (unused - from TTY)
BC41 BNE $BC46
BC43 JSR $BB44 ; -Print '?'
BC46 iBC46 JSR $BBF5 ; qinlin Do Input Prompt
BC49 iBC49 STX $77 ; Pointer: Current Byte of BASIC Text
BC4B STY $78
BC4D iBC4D JSR $0070 ; Subroutine: Get Next Byte of BASIC Text
BC50 BIT $07
BC52 BPL $BC85
BC54 BIT $0B
BC56 BVC $BC61
BC58 INX
BC59 STX $77 ; Pointer: Current Byte of BASIC Text
BC5B LDA #$00
BC5D STA $03 ; Search Character
BC5F BEQ $BC6D
BC61 iBC61 STA $03 ; Search Character
BC63 CMP #$22
BC65 BEQ $BC6E
BC67 LDA #$3A
BC69 STA $03 ; Search Character
BC6B LDA #$2C
BC6D iBC6D CLC
BC6E iBC6E STA $04 ; Flag: Scan for Quote at End of String
BC70 LDA $77 ; Pointer: Current Byte of BASIC Text
BC72 LDY $78
BC74 ADC #$00
BC76 BCC $BC79
BC78 INY
BC79 iBC79 JSR $C5B6
BC7C JSR $C918
BC7F JSR $B965
BC82 JMP $BC8D
BC85 iBC85 JSR $CE29 ; fin Convert ASCII String to a Number in FAC#1
BC88 LDA $08 ; Data Type: $80 = Integer, $00 = Floating
BC8A JSR $B94D
BC8D iBC8D JSR $0076 ; Entry to Get Same Byte of Text Again
BC90 BEQ $BC99
BC92 CMP #$2C
BC94 BEQ $BC99
BC96 JMP $BB4C ; doagin Handle Bad Data
BC99 iBC99 LDA $77 ; Pointer: Current Byte of BASIC Text
BC9B LDY $78
BC9D STA $40 ; INPUT, READ and GET vector to save CHRGET
BC9F STY $41
BCA1 LDA $48 ; Y-save; op-save; Temporary storage for TXTPTR
BCA3 LDY $49
BCA5 STA $77 ; Pointer: Current Byte of BASIC Text
BCA7 STY $78
BCA9 JSR $0076 ; Entry to Get Same Byte of Text Again
BCAC BEQ $BCDA
BCAE JSR $BEF5 ; -Test comma-
BCB1 JMP $BC11
BCB4 iBCB4 JSR $B891 ; datan Search for Next Statement / Line
BCB7 INY
BCB8 TAX
BCB9 BNE $BCCD
BCBB LDX #$2A
BCBD INY
BCBE LDA ($77),Y ; Pointer: Current Byte of BASIC Text
BCC0 BEQ $BD2D
BCC2 INY
BCC3 LDA ($77),Y ; Pointer: Current Byte of BASIC Text
BCC5 STA $3C ; Current DATA Line Number
BCC7 INY
BCC8 LDA ($77),Y ; Pointer: Current Byte of BASIC Text
BCCA INY
BCCB STA $3D
BCCD iBCCD LDA ($77),Y ; Pointer: Current Byte of BASIC Text
BCCF TAX
BCD0 JSR $B886
BCD3 CPX #$83
BCD5 BNE $BCB4
BCD7 JMP $BC4D
BCDA iBCDA LDA $40 ; INPUT, READ and GET vector to save CHRGET
BCDC LDY $41
BCDE LDX $0B ; Flag: $00 = INPUT, $40 = GET, $98 = READ
BCE0 BPL $BCE5
BCE2 JMP $B7C1
BCE5 iBCE5 LDY #$00
BCE7 LDA ($40),Y ; INPUT, READ and GET vector to save CHRGET
BCE9 BEQ $BCF6 ; exint Input Error Messages DATA
BCEB LDA $10 ; 3: width of source (unused - from TTY)
BCED BNE $BCF6 ; exint Input Error Messages DATA
BCEF LDA #$F7
BCF1 LDY #$BC
BCF3 JMP $BB1D ; strout Output String
; exint Input Error Messages DATA
BCF6 .byte 60 3F 45 58 54 52 41 20 ;`?extra
BCFE .byte 49 47 4E 4F 52 45 44 0D ;ignored.
BD06 .byte 00 3F 52 45 44 4F 20 46 ;.?redo f
BD0E .byte 52 4F 4D 20 53 54 41 52 ;rom star
BD16 .byte 54 0D 00 ;t..
; next Perform [next]
BD19 BNE $BD1F
BD1B LDY #$00
BD1D BEQ $BD22
BD1F iBD1F JSR $C12B ; ptrget Identify Variable
BD22 iBD22 STA $46 ; Pointer: Index Variable for FOR/NEXT
BD24 STY $47
BD26 JSR $B322 ; fndfor Find FOR/GOSUB Entry on Stack
BD29 BEQ $BD2F
BD2B LDX #$00
BD2D iBD2D BEQ $BD95
BD2F iBD2F TXS
BD30 TXA
BD31 CLC
BD32 ADC #$04
BD34 PHA
BD35 ADC #$06
BD37 STA $21
BD39 PLA
BD3A LDY #$01
BD3C JSR $CCD8 ; movfm Load FAC#1 From Memory
BD3F TSX
BD40 LDA $0109,X
BD43 STA $63 ; Floating Accum. #1: Sign
BD45 LDA $46 ; Pointer: Index Variable for FOR/NEXT
BD47 LDY $47
BD49 JSR $C99D ; fadd Perform Addition
BD4C JSR $CD06
BD4F LDY #$01
BD51 JSR $CD93
BD54 TSX
BD55 SEC
BD56 SBC $0109,X
BD59 BEQ $BD72
; donext Check Valid Loop
BD5B LDA $010F,X
BD5E STA $36 ; Current BASIC Line Number
BD60 LDA $0110,X
BD63 STA $37
BD65 LDA $0112,X
BD68 STA $77 ; Pointer: Current Byte of BASIC Text
BD6A LDA $0111,X
BD6D STA $78
BD6F iBD6F JMP $B74A ; newstt BASIC Warm Start
BD72 iBD72 TXA
BD73 ADC #$11
BD75 TAX
BD76 TXS
BD77 JSR $0076 ; Entry to Get Same Byte of Text Again
BD7A CMP #$2C
BD7C BNE $BD6F
BD7E JSR $0070 ; Subroutine: Get Next Byte of BASIC Text
BD81 JSR $BD1F
; frmnum Confirm Result
BD84 iBD84 JSR $BD98 ; frmevl Evaluate Expression in Text
; -Confirm numeric mode
BD87 iBD87 CLC
BD88 BIT $38
; *** Resyncing ***
; -Confirm string mode
BD89 iBD89 SEC
BD8A iBD8A BIT $07
BD8C BMI $BD91
BD8E BCS $BD93
BD90 iBD90 RTS
BD91 iBD91 BCS $BD90
BD93 iBD93 LDX #$A3
BD95 iBD95 JMP $B3CF ; error Error Routine
; frmevl Evaluate Expression in Text
BD98 iBD98 LDX $77 ; Pointer: Current Byte of BASIC Text
BD9A BNE $BD9E
BD9C DEC $78
BD9E iBD9E DEC $77 ; Pointer: Current Byte of BASIC Text
BDA0 LDX #$00
BDA2 BIT $48
; *** BDA2: ADDRESS DIFFER. This may indicate misassembly ***
BDA4 TXA
BDA5 PHA
BDA6 LDA #$01
BDA8 JSR $B393 ; getstk Check Stack Depth
BDAB JSR $BE81 ; eval Evaluate Single Term
BDAE LDA #$00
BDB0 STA $4A ; Comparison symbol accumulator: bits 0,1,2 are <, =, >.
BDB2 iBDB2 JSR $0076 ; Entry to Get Same Byte of Text Again
BDB5 iBDB5 SEC
BDB6 SBC #$B1
BDB8 BCC $BDD1
BDBA CMP #$03
BDBC BCS $BDD1
BDBE CMP #$01
BDC0 ROL
BDC1 EOR #$01
BDC3 EOR $4A ; Comparison symbol accumulator: bits 0,1,2 are <, =, >.
BDC5 CMP $4A ; Comparison symbol accumulator: bits 0,1,2 are <, =, >.
BDC7 BCC $BE2A
BDC9 STA $4A ; Comparison symbol accumulator: bits 0,1,2 are <, =, >.
BDCB JSR $0070 ; Subroutine: Get Next Byte of BASIC Text
BDCE JMP $BDB5
BDD1 iBDD1 LDX $4A ; Comparison symbol accumulator: bits 0,1,2 are <, =, >.
BDD3 BNE $BE01
BDD5 BCS $BE56
BDD7 ADC #$07
BDD9 BCC $BE56
BDDB ADC $07 ; Data Type: $FF = String, $00 = Numeric
BDDD BNE $BDE2
BDDF JMP $C74F ; cat Concatenate Two Strings
BDE2 iBDE2 ADC #$FF
BDE4 STA $1F ; Utility Pointer Area
BDE6 ASL
BDE7 ADC $1F ; Utility Pointer Area
BDE9 TAY
BDEA iBDEA PLA
BDEB CMP $B094,Y ; optab BASIC Operator Vectors DATA
BDEE BCS $BE5B
BDF0 JSR $BD87 ; -Confirm numeric mode
BDF3 iBDF3 PHA
BDF4 iBDF4 JSR $BE1A
BDF7 PLA
BDF8 LDY $48 ; Y-save; op-save; Temporary storage for TXTPTR
BDFA BPL $BE13
BDFC TAX
BDFD BEQ $BE59
BDFF BNE $BE64
BE01 iBE01 LSR $07 ; Data Type: $FF = String, $00 = Numeric
BE03 TXA
BE04 ROL
BE05 LDX $77 ; Pointer: Current Byte of BASIC Text
BE07 BNE $BE0B
BE09 DEC $78
BE0B iBE0B DEC $77 ; Pointer: Current Byte of BASIC Text
BE0D LDY #$1B
BE0F STA $4A ; Comparison symbol accumulator: bits 0,1,2 are <, =, >.
BE11 BNE $BDEA
BE13 iBE13 CMP $B094,Y ; optab BASIC Operator Vectors DATA
BE16 BCS $BE64
BE18 BCC $BDF3
BE1A iBE1A LDA $B096,Y
BE1D PHA
BE1E LDA $B095,Y
BE21 PHA
BE22 JSR $BE2D
BE25 LDA $4A ; Comparison symbol accumulator: bits 0,1,2 are <, =, >.
BE27 JMP $BDA3
BE2A iBE2A JMP $BF00 ; synerr Output ?SYNTAX Error
BE2D iBE2D LDA $63 ; Floating Accum. #1: Sign
BE2F LDX $B094,Y ; optab BASIC Operator Vectors DATA
BE32 iBE32 TAY
BE33 PLA
BE34 STA $1F ; Utility Pointer Area
BE36 PLA
BE37 STA $20
BE39 TYA
BE3A PHA
BE3B INC $1F ; Utility Pointer Area
BE3D BNE $BE41
BE3F INC $20
BE41 iBE41 JSR $CD51 ; round Round FAC#1
BE44 LDA $62
BE46 PHA
BE47 LDA $61
BE49 PHA
BE4A LDA $60
BE4C PHA
BE4D LDA $5F ; Floating Accum. #1: Mantissa
BE4F PHA
BE50 LDA $5E ; Floating-Point Accumulator #1: Exponent
BE52 PHA
BE53 JMP ($001F) ; Utility Pointer Area
BE56 iBE56 LDY #$FF
BE58 PLA
BE59 iBE59 BEQ $BE7E
BE5B iBE5B CMP #$64
BE5D BEQ $BE62
BE5F JSR $BD87 ; -Confirm numeric mode
BE62 iBE62 STY $48 ; Y-save; op-save; Temporary storage for TXTPTR
BE64 iBE64 PLA
BE65 LSR
BE66 STA $0C ; Flag TAN sign / Comparison Result
BE68 PLA
BE69 STA $66 ; Floating-Point Accumulator #2: Exponent
BE6B PLA
BE6C STA $67 ; Floating Accum. #2: Mantissa
BE6E PLA
BE6F STA $68
BE71 PLA
BE72 STA $69
BE74 PLA
BE75 STA $6A
BE77 PLA
BE78 STA $6B ; Floating Accum. #2: Sign
BE7A EOR $63 ; Floating Accum. #1: Sign
BE7C STA $6C ; Sign Comparison Result: Accum. # 1 vs #2
BE7E iBE7E LDA $5E ; Floating-Point Accumulator #1: Exponent
BE80 RTS
; eval Evaluate Single Term
BE81 iBE81 LDA #$00
BE83 STA $07 ; Data Type: $FF = String, $00 = Numeric
BE85 iBE85 JSR $0070 ; Subroutine: Get Next Byte of BASIC Text
BE88 BCS $BE8D
BE8A iBE8A JMP $CE29 ; fin Convert ASCII String to a Number in FAC#1
BE8D iBE8D JSR $C1B6 ; isletc Does A hold an alphabetic character?
BE90 BCS $BF0D
BE92 CMP #$FF
BE94 BNE $BEA5 ; qdot Continue Expression
BE96 LDA #$A0
BE98 LDY #$BE
BE9A JSR $CCD8 ; movfm Load FAC#1 From Memory
BE9D JMP $0070 ; Subroutine: Get Next Byte of BASIC Text
; pival Constant - PI DATA
BEA0 .byte 82 49 0F DA A1 ;.i.Z.
; qdot Continue Expression
BEA5 iBEA5 CMP #$2E
BEA7 BEQ $BE8A
BEA9 CMP #$AB
BEAB BEQ $BF05 ; domin Set up NOT Function
BEAD CMP #$AA
BEAF BEQ $BE85
BEB1 CMP #$22
BEB3 BNE $BEC4
BEB5 iBEB5 LDA $77 ; Pointer: Current Byte of BASIC Text
BEB7 LDY $78
BEB9 ADC #$00
BEBB BCC $BEBE
BEBD INY
BEBE iBEBE JSR $C5B0 ; strlit Set Up String
BEC1 JMP $C918
BEC4 iBEC4 CMP #$A8
BEC6 BNE $BEDB
BEC8 LDY #$18
BECA BNE $BF07
; - Evaluate <equal>
BECC JSR $C2EA ; ayint FAC#1 to Positive Integer
BECF LDA $62
BED1 EOR #$FF
BED3 TAY
BED4 LDA $61
BED6 EOR #$FF
BED8 JMP $C4BC ; givayf Convert Integer in (AC/YR) to Flpt
BEDB iBEDB CMP #$A5
BEDD BNE $BEE2
BEDF JMP $C51D ; fndoer Perform [fn]
BEE2 iBEE2 CMP #$B4
BEE4 BCC $BEE9 ; parchk Expression in Brackets
BEE6 JMP $C047 ; isfun Identify Function Type
; parchk Expression in Brackets
BEE9 iBEE9 JSR $BEF2 ; -Test '('-
BEEC JSR $BD98 ; frmevl Evaluate Expression in Text
; chkcls Confirm Character-Test ')'-
BEEF iBEEF LDA #$29
BEF1 BIT $28A9
; *** Resyncing ***
; -Test '('-
BEF2 iBEF2 LDA #$28
BEF4 BIT $2CA9
; *** Resyncing ***
; -Test comma-
BEF5 iBEF5 LDA #$2C
; -Confirm Character in A
BEF7 iBEF7 LDY #$00
BEF9 CMP ($77),Y ; Pointer: Current Byte of BASIC Text
BEFB BNE $BF00 ; synerr Output ?SYNTAX Error
BEFD JMP $0070 ; Subroutine: Get Next Byte of BASIC Text
; synerr Output ?SYNTAX Error
BF00 iBF00 LDX #$10
BF02 JMP $B3CF ; error Error Routine
; domin Set up NOT Function
BF05 iBF05 LDY #$15
BF07 iBF07 PLA
BF08 PLA
BF09 JMP $BDF4
; Patch for getspt
BF0C CLV
BF0D iBF0D JMP $BF8C ; isvar Search for Variable
BF10 iBF10 PHA
BF11 LDA $0D ; 3: Flag to suppress PRINT or PRINT# when -ve
BF13 BEQ $BF1D
BF15 PLA
BF16 CMP $0F ; 3: terminal width (unused-carried over from TTY)
BF18 BNE $BF1E
BF1A JMP $BA70
BF1D iBF1D PLA
BF1E iBF1E JMP $BA74
; ?
BF21 iBF21 JSR $0070 ; Subroutine: Get Next Byte of BASIC Text
BF24 CMP #$FF
BF26 BNE $BF2B
BF28 JMP $BF00 ; synerr Output ?SYNTAX Error
BF2B iBF2B JMP $0076 ; Entry to Get Same Byte of Text Again
; Patch for [input]
BF2E iBF2E LDA $10 ; 3: width of source (unused - from TTY)
BF30 BNE $BF35
BF32 JMP $BBF1
BF35 iBF35 LDA $96 ; Kernal I/O Status Word: ST
BF37 AND #$40
BF39 BNE $BF3E
BF3B JMP $BBD5
BF3E iBF3E JMP $BC09
; Unused EMPTY
BF41 .byte AA AA AA AA AA AA AA AA ;........
BF49 .byte AA AA AA AA AA AA AA AA ;........
BF51 .byte AA AA AA AA AA AA AA AA ;........
BF59 .byte AA AA AA AA AA AA AA AA ;........
BF61 .byte AA AA AA AA AA AA AA AA ;........
BF69 .byte AA AA AA AA AA AA AA AA ;........
BF71 .byte AA AA AA AA AA AA AA AA ;........
BF79 .byte AA AA AA AA AA AA AA AA ;........
BF81 .byte AA AA AA AA AA AA AA AA ;........
BF89 .byte AA AA AA ;...
; isvar Search for Variable
BF8C iBF8C JSR $C12B ; ptrget Identify Variable
BF8F STA $61
BF91 STY $62
BF93 LDA $42 ; Current BASIC Variable Name
BF95 LDY $43
BF97 LDX $07 ; Data Type: $FF = String, $00 = Numeric
BF99 BEQ $BFD4
BF9B LDX #$00
BF9D STX $6D ; Floating Accum. #1. Low-Order (Rounding)
BF9F LDX $62
BFA1 CPX #$8B
BFA3 BCC $BFD3
BFA5 CMP #$54
BFA7 BNE $BFC1
BFA9 CPY #$C9
BFAB BNE $BFC1
; tisasc Convert TI to ASCII String
BFAD JSR $C003 ; -read real time clock
BFB0 STY $5B
BFB2 DEY
BFB3 STY $6E ; Pointer: Cassette Buffer
BFB5 LDY #$06
BFB7 STY $5A
BFB9 LDY #$24
BFBB JSR $D01E ; foutim Convert TI to String
BFBE JMP $C598
BFC1 iBFC1 CMP #$44
BFC3 BNE $BFD3
BFC5 CPY #$D3
BFC7 BNE $BFD3
BFC9 JSR $BFFC
BFCC LDA $0E ; 3: File# of current I/O device (as 0010)
BFCE LDY $0F ; 3: terminal width (unused-carried over from TTY)
BFD0 JMP $C5B0 ; strlit Set Up String
BFD3 iBFD3 RTS
BFD4 iBFD4 LDX $08 ; Data Type: $80 = Integer, $00 = Floating
BFD6 BPL $BFE5
BFD8 LDY #$00
BFDA LDA ($61),Y
BFDC TAX
BFDD INY
BFDE LDA ($61),Y
BFE0 TAY
BFE1 TXA
BFE2 JMP $C4BC ; givayf Convert Integer in (AC/YR) to Flpt
BFE5 iBFE5 LDX $62
BFE7 CPX #$8B
BFE9 BCC $C040
BFEB CMP #$54
BFED BNE $C00F
BFEF CPY #$49
BFF1 BNE $C040
BFF3 JSR $C003 ; -read real time clock
BFF6 TYA
BFF7 LDX #$A0
BFF9 JMP $CD85
BFFC iBFFC LDA $0D ; 3: Flag to suppress PRINT or PRINT# when -ve
BFFE BNE $BFD3
C000 JMP $FFBD ; jmp $d995
; -read real time clock
C003 iC003 LDA #$8B
C005 LDY #$00
C007 SEI
C008 JSR $CCD8 ; movfm Load FAC#1 From Memory
C00B CLI
C00C STY $5F ; Floating Accum. #1: Mantissa
C00E RTS
C00F iC00F CMP #$53
C011 BNE $C01C
C013 CPY #$54
C015 BNE $C01C
C017 LDA $96 ; Kernal I/O Status Word: ST
C019 JMP $CD72
C01C iC01C CMP #$44
C01E BNE $C040
C020 CPY #$53
C022 BNE $C040
C024 JSR $BFFC
C027 LDY #$00
C029 LDA ($0E),Y ; 3: File# of current I/O device (as 0010)
C02B AND #$0F
C02D ASL
C02E STA $09 ; Flag: DATA scan/LlST quote/Garbage Coll
C030 ASL
C031 ASL
C032 ADC $09 ; Flag: DATA scan/LlST quote/Garbage Coll
C034 STA $09 ; Flag: DATA scan/LlST quote/Garbage Coll
C036 INY
C037 LDA ($0E),Y ; 3: File# of current I/O device (as 0010)
C039 AND #$0F
C03B ADC $09 ; Flag: DATA scan/LlST quote/Garbage Coll
C03D JMP $CD72
C040 iC040 LDA $61
C042 LDY $62
C044 JMP $CCD8 ; movfm Load FAC#1 From Memory
; isfun Identify Function Type
C047 iC047 ASL
C048 PHA
C049 TAX
C04A JSR $0070 ; Subroutine: Get Next Byte of BASIC Text
C04D CPX #$8F
C04F BCC $C071 ; numfun Evaluate Numeric Function
; strfun Evaluate String Function
C051 JSR $BEF2 ; -Test '('-
C054 JSR $BD98 ; frmevl Evaluate Expression in Text
C057 JSR $BEF5 ; -Test comma-
C05A JSR $BD89 ; -Confirm string mode
C05D PLA
C05E TAX
C05F LDA $62
C061 PHA
C062 LDA $61
C064 PHA
C065 TXA
C066 PHA
C067 JSR $C8D4 ; -Eval Byte Parameter
C06A PLA
C06B TAY
C06C TXA
C06D PHA
C06E JMP $C076
; numfun Evaluate Numeric Function
C071 iC071 JSR $BEE9 ; parchk Expression in Brackets
C074 PLA
C075 TAY
C076 iC076 LDA $AFFE,Y
C079 STA $52
C07B LDA $AFFF,Y
C07E STA $53
C080 JSR $0051
C083 JMP $BD87 ; -Confirm numeric mode
; orop Evaluate <or>
C086 LDY #$FF
C088 BIT $00A0
; *** Resyncing ***
; - Evaluate <and>
C089 LDY #$00
C08B STY $05 ; Input Buffer Pointer / No. of Subscripts
C08D JSR $C2EA ; ayint FAC#1 to Positive Integer
C090 LDA $61
C092 EOR $05 ; Input Buffer Pointer / No. of Subscripts
C094 STA $03 ; Search Character
C096 LDA $62
C098 EOR $05 ; Input Buffer Pointer / No. of Subscripts
C09A STA $04 ; Flag: Scan for Quote at End of String
C09C JSR $CD32 ; movfa Copy FAC#2 into FAC#1
C09F JSR $C2EA ; ayint FAC#1 to Positive Integer
C0A2 LDA $62
C0A4 EOR $05 ; Input Buffer Pointer / No. of Subscripts
C0A6 AND $04 ; Flag: Scan for Quote at End of String
C0A8 EOR $05 ; Input Buffer Pointer / No. of Subscripts
C0AA TAY
C0AB LDA $61
C0AD EOR $05 ; Input Buffer Pointer / No. of Subscripts
C0AF AND $03 ; Search Character
C0B1 EOR $05 ; Input Buffer Pointer / No. of Subscripts
C0B3 JMP $C4BC ; givayf Convert Integer in (AC/YR) to Flpt
; dorel Evaluate <less> (comparison)
C0B6 JSR $BD8A
C0B9 BCS $C0CE ; strrel String Comparison
; numrel Numeric Comparison
C0BB LDA $6B ; Floating Accum. #2: Sign
C0BD ORA #$7F
C0BF AND $67 ; Floating Accum. #2: Mantissa
C0C1 STA $67 ; Floating Accum. #2: Mantissa
C0C3 LDA #$66
C0C5 LDY #$00
C0C7 JSR $CD91 ; fcomp Compare FAC#1 With Memory
C0CA TAX
C0CB JMP $C101
; strrel String Comparison
C0CE iC0CE LDA #$00
C0D0 STA $07 ; Data Type: $FF = String, $00 = Numeric
C0D2 DEC $4A ; Comparison symbol accumulator: bits 0,1,2 are <, =, >.
C0D4 JSR $C7B8
C0D7 STA $5E ; Floating-Point Accumulator #1: Exponent
C0D9 STX $5F ; Floating Accum. #1: Mantissa
C0DB STY $60
C0DD LDA $69
C0DF LDY $6A
C0E1 JSR $C7BC
C0E4 STX $69
C0E6 STY $6A
C0E8 TAX
C0E9 SEC
C0EA SBC $5E ; Floating-Point Accumulator #1: Exponent
C0EC BEQ $C0F6
C0EE LDA #$01
C0F0 BCC $C0F6
C0F2 LDX $5E ; Floating-Point Accumulator #1: Exponent
C0F4 LDA #$FF
C0F6 iC0F6 STA $63 ; Floating Accum. #1: Sign
C0F8 LDY #$FF
C0FA INX
C0FB iC0FB INY
C0FC DEX
C0FD BNE $C106
C0FF LDX $63 ; Floating Accum. #1: Sign
C101 iC101 BMI $C112
C103 CLC
C104 BCC $C112
C106 iC106 LDA ($69),Y
C108 CMP ($5F),Y ; Floating Accum. #1: Mantissa
C10A BEQ $C0FB
C10C LDX #$FF
C10E BCS $C112
C110 LDX #$01
C112 iC112 INX
C113 TXA
C114 ROL
C115 AND $0C ; Flag TAN sign / Comparison Result
C117 BEQ $C11B
C119 LDA #$FF
C11B iC11B JMP $CD72
; dim Perform [dim]
C11E iC11E JSR $BEF5 ; -Test comma-
C121 TAX
C122 JSR $C130
C125 JSR $0076 ; Entry to Get Same Byte of Text Again
C128 BNE $C11E ; dim Perform [dim]
C12A RTS
; ptrget Identify Variable
C12B iC12B LDX #$00
C12D JSR $0076 ; Entry to Get Same Byte of Text Again
C130 iC130 STX $06 ; Flag: Default Array DiMension / array name initial / AND, OR flag
C132 iC132 STA $42 ; Current BASIC Variable Name
C134 JSR $0076 ; Entry to Get Same Byte of Text Again
C137 JSR $C1B6 ; isletc Does A hold an alphabetic character?
C13A BCS $C13F
C13C iC13C JMP $BF00 ; synerr Output ?SYNTAX Error
C13F iC13F LDX #$00
C141 STX $07 ; Data Type: $FF = String, $00 = Numeric
C143 STX $08 ; Data Type: $80 = Integer, $00 = Floating
C145 JSR $0070 ; Subroutine: Get Next Byte of BASIC Text
C148 BCC $C14F
C14A JSR $C1B6 ; isletc Does A hold an alphabetic character?
C14D BCC $C15A
C14F iC14F TAX
C150 iC150 JSR $0070 ; Subroutine: Get Next Byte of BASIC Text
C153 BCC $C150
C155 JSR $C1B6 ; isletc Does A hold an alphabetic character?
C158 BCS $C150
C15A iC15A CMP #$24
C15C BNE $C164
C15E LDA #$FF
C160 STA $07 ; Data Type: $FF = String, $00 = Numeric
C162 BNE $C174
C164 iC164 CMP #$25
C166 BNE $C17B
C168 LDA $0A ; Flag: Subscript Ref / User Function Call
C16A BNE $C13C
C16C LDA #$80
C16E STA $08 ; Data Type: $80 = Integer, $00 = Floating
C170 ORA $42 ; Current BASIC Variable Name
C172 STA $42 ; Current BASIC Variable Name
C174 iC174 TXA
C175 ORA #$80
C177 TAX
C178 JSR $0070 ; Subroutine: Get Next Byte of BASIC Text
C17B iC17B STX $43
C17D SEC
C17E ORA $0A ; Flag: Subscript Ref / User Function Call
C180 SBC #$28
C182 BNE $C187 ; ordvar Locate Ordinary Variable
C184 JMP $C2FC ; isary Get Array Parameters
; ordvar Locate Ordinary Variable
C187 iC187 LDY #$00
C189 STY $0A ; Flag: Subscript Ref / User Function Call
C18B LDA $2A ; Pointer: Start of BASIC Variables
C18D LDX $2B
C18F iC18F STX $5D
C191 iC191 STA $5C
C193 CPX $2D
C195 BNE $C19B
C197 CMP $2C ; Pointer: Start of BASIC Arrays
C199 BEQ $C1C0 ; notfns Create New Variable
C19B iC19B LDA $42 ; Current BASIC Variable Name
C19D CMP ($5C),Y
C19F BNE $C1AC
C1A1 LDA $43
C1A3 INY
C1A4 CMP ($5C),Y
C1A6 BNE $C1AB
C1A8 JMP $C2B9
C1AB iC1AB DEY
C1AC iC1AC CLC
C1AD LDA $5C
C1AF ADC #$07
C1B1 BCC $C191
C1B3 INX
C1B4 BNE $C18F
; isletc Does A hold an alphabetic character?
C1B6 iC1B6 CMP #$41
C1B8 BCC $C1BF
C1BA SBC #$5B
C1BC SEC
C1BD SBC #$A5
C1BF iC1BF RTS
; notfns Create New Variable
C1C0 iC1C0 PLA
C1C1 PHA
C1C2 CMP #$8E
C1C4 BNE $C1CB ; notevl Create Variable
C1C6 iC1C6 LDA #$C9
C1C8 LDY #$D0
C1CA RTS
; notevl Create Variable
C1CB iC1CB LDA $42 ; Current BASIC Variable Name
C1CD LDY $43
C1CF CMP #$54
C1D1 BNE $C1DE
C1D3 CPY #$C9
C1D5 BEQ $C1C6
C1D7 CPY #$49
C1D9 BNE $C1DE
C1DB iC1DB JMP $BF00 ; synerr Output ?SYNTAX Error
C1DE iC1DE CMP #$53
C1E0 BNE $C1E6
C1E2 CPY #$54
C1E4 BEQ $C1DB
C1E6 iC1E6 CMP #$44
C1E8 BNE $C1F2
C1EA CPY #$53
C1EC BEQ $C1DB
C1EE CPY #$D3
C1F0 BEQ $C1DB
C1F2 iC1F2 LDA $2C ; Pointer: Start of BASIC Arrays
C1F4 LDY $2D
C1F6 STA $5C
C1F8 STY $5D
C1FA LDA $2E ; Pointer End of BASIC Arrays (+1)
C1FC LDY $2F
C1FE STA $57
C200 STY $58
C202 CLC
C203 ADC #$07
C205 BCC $C208
C207 INY
C208 iC208 STA $55
C20A STY $56
C20C JSR $B350 ; bltu Open Space in Memory
C20F LDA $55
C211 LDY $56
C213 INY
C214 STA $2C ; Pointer: Start of BASIC Arrays
C216 STY $2D
C218 STA $55
C21A STY $56
C21C iC21C LDA $55
C21E LDX $56
C220 iC220 CPX $2F
C222 BNE $C228
C224 CMP $2E ; Pointer End of BASIC Arrays (+1)
C226 BEQ $C29D
C228 iC228 STA $1F ; Utility Pointer Area
C22A STX $20
C22C LDY #$00
C22E LDA ($1F),Y ; Utility Pointer Area
C230 TAX
C231 INY
C232 LDA ($1F),Y ; Utility Pointer Area
C234 PHP
C235 INY
C236 LDA ($1F),Y ; Utility Pointer Area
C238 ADC $55
C23A STA $55
C23C INY
C23D LDA ($1F),Y ; Utility Pointer Area
C23F ADC $56
C241 STA $56
C243 PLP
C244 BPL $C21C
C246 TXA
C247 BMI $C21C
C249 INY
C24A LDA ($1F),Y ; Utility Pointer Area
C24C LDY #$00
C24E ASL
C24F ADC #$05
C251 ADC $1F ; Utility Pointer Area
C253 STA $1F ; Utility Pointer Area
C255 BCC $C259
C257 INC $20
C259 iC259 LDX $20
C25B CPX $56
C25D BNE $C263
C25F CMP $55
C261 BEQ $C220
C263 iC263 LDY #$00
C265 LDA ($1F),Y ; Utility Pointer Area
C267 BEQ $C290
C269 INY
C26A CLC
C26B ADC ($1F),Y ; Utility Pointer Area
C26D STA $57
C26F TAX
C270 INY
C271 LDA ($1F),Y ; Utility Pointer Area
C273 ADC #$00
C275 STA $58
C277 CMP $31
C279 BCC $C290
C27B BNE $C281
C27D CPX $30 ; Pointer: Bottom of String Storage
C27F BCC $C290
C281 iC281 LDY #$00
C283 LDA ($57),Y
C285 ADC #$06
C287 STA ($57),Y
C289 INY
C28A LDA ($57),Y
C28C ADC #$00
C28E STA ($57),Y
C290 iC290 LDA #$03
C292 CLC
C293 ADC $1F ; Utility Pointer Area
C295 STA $1F ; Utility Pointer Area
C297 BCC $C259
C299 INC $20
C29B BNE $C259
C29D iC29D LDY #$00
C29F LDA $42 ; Current BASIC Variable Name
C2A1 STA ($5C),Y
C2A3 INY
C2A4 LDA $43
C2A6 STA ($5C),Y
C2A8 LDA #$00
C2AA INY
C2AB STA ($5C),Y
C2AD INY
C2AE STA ($5C),Y
C2B0 INY
C2B1 STA ($5C),Y
C2B3 INY
C2B4 STA ($5C),Y
C2B6 INY
C2B7 STA ($5C),Y
C2B9 iC2B9 LDA $5C
C2BB CLC
C2BC ADC #$02
C2BE LDY $5D
C2C0 BCC $C2C3
C2C2 INY
C2C3 iC2C3 STA $44 ; Pointer: Current BASIC Variable Data
C2C5 STY $45
C2C7 RTS
; aryget Allocate Array Pointer Space
C2C8 iC2C8 LDA $05 ; Input Buffer Pointer / No. of Subscripts
C2CA ASL
C2CB ADC #$05
C2CD ADC $5C
C2CF LDY $5D
C2D1 BCC $C2D4
C2D3 INY
C2D4 iC2D4 STA $55
C2D6 STY $56
C2D8 RTS
; n32768 Constant 32768 in Flpt DATA
C2D9 .byte 90 80 00 00 ;....
; intidx Evaluate Text for Integer
C2DD iC2DD JSR $0070 ; Subroutine: Get Next Byte of BASIC Text
C2E0 JSR $BD98 ; frmevl Evaluate Expression in Text
C2E3 iC2E3 JSR $BD87 ; -Confirm numeric mode
C2E6 LDA $63 ; Floating Accum. #1: Sign
C2E8 BMI $C2F7
; ayint FAC#1 to Positive Integer
C2EA iC2EA LDA $5E ; Floating-Point Accumulator #1: Exponent
C2EC CMP #$90
C2EE BCC $C2F9
C2F0 LDA #$D9
C2F2 LDY #$C2
C2F4 JSR $CD91 ; fcomp Compare FAC#1 With Memory
C2F7 iC2F7 BNE $C373 ; - ?ILLEGAL QUANTITY
C2F9 iC2F9 JMP $CDD1 ; qint Convert FAC#1 to Integer
; isary Get Array Parameters
C2FC iC2FC LDA $06 ; Flag: Default Array DiMension / array name initial / AND, OR flag
C2FE ORA $08 ; Data Type: $80 = Integer, $00 = Floating
C300 PHA
C301 LDA $07 ; Data Type: $FF = String, $00 = Numeric
C303 PHA
C304 LDY #$00
C306 iC306 TYA
C307 PHA
C308 LDA $43
C30A PHA
C30B LDA $42 ; Current BASIC Variable Name
C30D PHA
C30E JSR $C2DD ; intidx Evaluate Text for Integer
C311 PLA
C312 STA $42 ; Current BASIC Variable Name
C314 PLA
C315 STA $43
C317 PLA
C318 TAY
C319 TSX
C31A LDA $0102,X
C31D PHA
C31E LDA $0101,X
C321 PHA
C322 LDA $61
C324 STA $0102,X
C327 LDA $62
C329 STA $0101,X
C32C INY
C32D JSR $0076 ; Entry to Get Same Byte of Text Again
C330 CMP #$2C
C332 BEQ $C306
C334 STY $05 ; Input Buffer Pointer / No. of Subscripts
C336 JSR $BEEF ; chkcls Confirm Character
C339 PLA
C33A STA $07 ; Data Type: $FF = String, $00 = Numeric
C33C PLA
C33D STA $08 ; Data Type: $80 = Integer, $00 = Floating
C33F AND #$7F
C341 STA $06 ; Flag: Default Array DiMension / array name initial / AND, OR flag
; fndary Find Array
C343 LDX $2C ; Pointer: Start of BASIC Arrays
C345 LDA $2D
C347 iC347 STX $5C
C349 STA $5D
C34B CMP $2F
C34D BNE $C353
C34F CPX $2E ; Pointer End of BASIC Arrays (+1)
C351 BEQ $C38C ; notfdd Create Array
C353 iC353 LDY #$00
C355 LDA ($5C),Y
C357 INY
C358 CMP $42 ; Current BASIC Variable Name
C35A BNE $C362
C35C LDA $43
C35E CMP ($5C),Y
C360 BEQ $C378 ; - ?REDIM'D ARRAY
C362 iC362 INY
C363 LDA ($5C),Y
C365 CLC
C366 ADC $5C
C368 TAX
C369 INY
C36A LDA ($5C),Y
C36C ADC $5D
C36E BCC $C347
; bserr ?BAD SUBSCRIPT
C370 iC370 LDX #$6B
C372 BIT $35A2
; *** Resyncing ***
; - ?ILLEGAL QUANTITY
C373 iC373 LDX #$35
C375 iC375 JMP $B3CF ; error Error Routine
; - ?REDIM'D ARRAY
C378 iC378 LDX #$78
C37A LDA $06 ; Flag: Default Array DiMension / array name initial / AND, OR flag
C37C BNE $C375
C37E JSR $C2C8 ; aryget Allocate Array Pointer Space
C381 LDA $05 ; Input Buffer Pointer / No. of Subscripts
C383 LDY #$04
C385 CMP ($5C),Y
C387 BNE $C370 ; bserr ?BAD SUBSCRIPT
C389 JMP $C415
; notfdd Create Array
C38C iC38C JSR $C2C8 ; aryget Allocate Array Pointer Space
C38F JSR $B3A0 ; reason Check Memory Overlap
C392 LDY #$00
C394 STY $6F
C396 LDX #$05
C398 LDA $42 ; Current BASIC Variable Name
C39A STA ($5C),Y
C39C BPL $C39F
C39E DEX
C39F iC39F INY
C3A0 LDA $43
C3A2 STA ($5C),Y
C3A4 BPL $C3A8
C3A6 DEX
C3A7 DEX
C3A8 iC3A8 STX $6E ; Pointer: Cassette Buffer
C3AA LDA $05 ; Input Buffer Pointer / No. of Subscripts
C3AC INY
C3AD INY
C3AE INY
C3AF STA ($5C),Y
C3B1 iC3B1 LDX #$0B
C3B3 LDA #$00
C3B5 BIT $06
C3B7 BVC $C3C1
C3B9 PLA
C3BA CLC
C3BB ADC #$01
C3BD TAX
C3BE PLA
C3BF ADC #$00
C3C1 iC3C1 INY
C3C2 STA ($5C),Y
C3C4 INY
C3C5 TXA
C3C6 STA ($5C),Y
C3C8 JSR $C477 ; umult Number of Bytes in Subscript
C3CB STX $6E ; Pointer: Cassette Buffer
C3CD STA $6F
C3CF LDY $1F ; Utility Pointer Area
C3D1 DEC $05 ; Input Buffer Pointer / No. of Subscripts
C3D3 BNE $C3B1
C3D5 ADC $56
C3D7 BCS $C436
C3D9 STA $56
C3DB TAY
C3DC TXA
C3DD ADC $55
C3DF BCC $C3E4
C3E1 INY
C3E2 BEQ $C436
C3E4 iC3E4 JSR $B3A0 ; reason Check Memory Overlap
C3E7 STA $2E ; Pointer End of BASIC Arrays (+1)
C3E9 STY $2F
C3EB LDA #$00
C3ED INC $6F
C3EF LDY $6E ; Pointer: Cassette Buffer
C3F1 BEQ $C3F8
C3F3 iC3F3 DEY
C3F4 STA ($55),Y
C3F6 BNE $C3F3
C3F8 iC3F8 DEC $56
C3FA DEC $6F
C3FC BNE $C3F3
C3FE INC $56
C400 SEC
C401 LDA $2E ; Pointer End of BASIC Arrays (+1)
C403 SBC $5C
C405 LDY #$02
C407 STA ($5C),Y
C409 LDA $2F
C40B INY
C40C SBC $5D
C40E STA ($5C),Y
C410 LDA $06 ; Flag: Default Array DiMension / array name initial / AND, OR flag
C412 BNE $C476
C414 INY
C415 iC415 LDA ($5C),Y
C417 STA $05 ; Input Buffer Pointer / No. of Subscripts
C419 LDA #$00
C41B STA $6E ; Pointer: Cassette Buffer
C41D iC41D STA $6F
C41F INY
C420 PLA
C421 TAX
C422 STA $61
C424 PLA
C425 STA $62
C427 CMP ($5C),Y
C429 BCC $C439 ; inlpn2 Locate Element in Array
C42B BNE $C433
C42D INY
C42E TXA
C42F CMP ($5C),Y
C431 BCC $C43A
C433 iC433 JMP $C370 ; bserr ?BAD SUBSCRIPT
C436 iC436 JMP $B3CD ; omerr Output ?OUT OF MEMORY Error
; inlpn2 Locate Element in Array
C439 iC439 INY
C43A iC43A LDA $6F
C43C ORA $6E ; Pointer: Cassette Buffer
C43E CLC
C43F BEQ $C44B
C441 JSR $C477 ; umult Number of Bytes in Subscript
C444 TXA
C445 ADC $61
C447 TAX
C448 TYA
C449 LDY $1F ; Utility Pointer Area
C44B iC44B ADC $62
C44D STX $6E ; Pointer: Cassette Buffer
C44F DEC $05 ; Input Buffer Pointer / No. of Subscripts
C451 BNE $C41D
C453 STA $6F
C455 LDX #$05
C457 LDA $42 ; Current BASIC Variable Name
C459 BPL $C45C
C45B DEX
C45C iC45C LDA $43
C45E BPL $C462
C460 DEX
C461 DEX
C462 iC462 STX $25
C464 LDA #$00
C466 JSR $C480
C469 TXA
C46A ADC $55
C46C STA $44 ; Pointer: Current BASIC Variable Data
C46E TYA
C46F ADC $56
C471 STA $45
C473 TAY
C474 LDA $44 ; Pointer: Current BASIC Variable Data
C476 iC476 RTS
; umult Number of Bytes in Subscript
C477 iC477 STY $1F ; Utility Pointer Area
C479 LDA ($5C),Y
C47B STA $25
C47D DEY
C47E LDA ($5C),Y
C480 iC480 STA $26
C482 LDA #$10
C484 STA $5A
C486 LDX #$00
C488 LDY #$00
C48A iC48A TXA
C48B ASL
C48C TAX
C48D TYA
C48E ROL
C48F TAY
C490 BCS $C436
C492 ASL $6E ; Pointer: Cassette Buffer
C494 ROL $6F
C496 BCC $C4A3
C498 CLC
C499 TXA
C49A ADC $25
C49C TAX
C49D TYA
C49E ADC $26
C4A0 TAY
C4A1 BCS $C436
C4A3 iC4A3 DEC $5A
C4A5 BNE $C48A
C4A7 RTS
; fre Evaluate <fre>
C4A8 LDA $07 ; Data Type: $FF = String, $00 = Numeric
C4AA BEQ $C4AF
C4AC JSR $C7B8
C4AF iC4AF JSR $C66A ; garbag Garbage Collection
C4B2 SEC
C4B3 LDA $30 ; Pointer: Bottom of String Storage
C4B5 SBC $2E ; Pointer End of BASIC Arrays (+1)
C4B7 TAY
C4B8 LDA $31
C4BA SBC $2F
; givayf Convert Integer in (AC/YR) to Flpt
C4BC iC4BC LDX #$00
C4BE STX $07 ; Data Type: $FF = String, $00 = Numeric
C4C0 STA $5F ; Floating Accum. #1: Mantissa
C4C2 STY $60
C4C4 LDX #$90
C4C6 JMP $CD7A
; pos Evaluate <pos>
C4C9 LDY $C6 ; Cursor Column on Current Line
C4CB iC4CB LDA #$00
C4CD BEQ $C4BC ; givayf Convert Integer in (AC/YR) to Flpt
; errdir Confirm Program Mode
C4CF iC4CF LDX $37
C4D1 INX
C4D2 BNE $C476
C4D4 LDX #$95
C4D6 BIT $E9A2
; *** Resyncing ***
; - ?UNDEF'D FUNCTION
C4D7 iC4D7 LDX #$E9
C4D9 JMP $B3CF ; error Error Routine
; - Perform [def]
C4DC JSR $C50A ; getfnm Check Syntax of FN
C4DF JSR $C4CF ; errdir Confirm Program Mode
C4E2 JSR $BEF2 ; -Test '('-
C4E5 LDA #$80
C4E7 STA $0A ; Flag: Subscript Ref / User Function Call
C4E9 JSR $C12B ; ptrget Identify Variable
C4EC JSR $BD87 ; -Confirm numeric mode
C4EF JSR $BEEF ; chkcls Confirm Character
C4F2 LDA #$B2
C4F4 JSR $BEF7 ; -Confirm Character in A
C4F7 PHA
C4F8 LDA $45
C4FA PHA
C4FB LDA $44 ; Pointer: Current BASIC Variable Data
C4FD PHA
C4FE LDA $78
C500 PHA
C501 LDA $77 ; Pointer: Current Byte of BASIC Text
C503 PHA
C504 JSR $B883 ; data Perform [data]
C507 JMP $C578
; getfnm Check Syntax of FN
C50A iC50A LDA #$A5
C50C JSR $BEF7 ; -Confirm Character in A
C50F ORA #$80
C511 STA $0A ; Flag: Subscript Ref / User Function Call
C513 JSR $C132
C516 STA $4B ; Pointer to temp storage in RAM for FN DEF, TAN, &c
C518 STY $4C
C51A JMP $BD87 ; -Confirm numeric mode
; fndoer Perform [fn]
C51D iC51D JSR $C50A ; getfnm Check Syntax of FN
C520 LDA $4C
C522 PHA
C523 LDA $4B ; Pointer to temp storage in RAM for FN DEF, TAN, &c
C525 PHA
C526 JSR $BEE9 ; parchk Expression in Brackets
C529 JSR $BD87 ; -Confirm numeric mode
C52C PLA
C52D STA $4B ; Pointer to temp storage in RAM for FN DEF, TAN, &c
C52F PLA
C530 STA $4C
C532 LDY #$02
C534 LDA ($4B),Y ; Pointer to temp storage in RAM for FN DEF, TAN, &c
C536 STA $44 ; Pointer: Current BASIC Variable Data
C538 TAX
C539 INY
C53A LDA ($4B),Y ; Pointer to temp storage in RAM for FN DEF, TAN, &c
C53C BEQ $C4D7 ; - ?UNDEF'D FUNCTION
C53E STA $45
C540 INY
C541 iC541 LDA ($44),Y ; Pointer: Current BASIC Variable Data
C543 PHA
C544 DEY
C545 BPL $C541
C547 LDY $45
C549 JSR $CD0A ; - Store FAC#1 at (AC/YR)
C54C LDA $78
C54E PHA
C54F LDA $77 ; Pointer: Current Byte of BASIC Text
C551 PHA
C552 LDA ($4B),Y ; Pointer to temp storage in RAM for FN DEF, TAN, &c
C554 STA $77 ; Pointer: Current Byte of BASIC Text
C556 INY
C557 LDA ($4B),Y ; Pointer to temp storage in RAM for FN DEF, TAN, &c
C559 STA $78
C55B LDA $45
C55D PHA
C55E LDA $44 ; Pointer: Current BASIC Variable Data
C560 PHA
C561 JSR $BD84 ; frmnum Confirm Result
C564 PLA
C565 STA $4B ; Pointer to temp storage in RAM for FN DEF, TAN, &c
C567 PLA
C568 STA $4C
C56A JSR $0076 ; Entry to Get Same Byte of Text Again
C56D BEQ $C572
C56F JMP $BF00 ; synerr Output ?SYNTAX Error
C572 iC572 PLA
C573 STA $77 ; Pointer: Current Byte of BASIC Text
C575 PLA
C576 STA $78
C578 iC578 LDY #$00
C57A PLA
C57B STA ($4B),Y ; Pointer to temp storage in RAM for FN DEF, TAN, &c
C57D PLA
C57E INY
C57F STA ($4B),Y ; Pointer to temp storage in RAM for FN DEF, TAN, &c
C581 PLA
C582 INY
C583 STA ($4B),Y ; Pointer to temp storage in RAM for FN DEF, TAN, &c
C585 PLA
C586 INY
C587 STA ($4B),Y ; Pointer to temp storage in RAM for FN DEF, TAN, &c
C589 PLA
C58A INY
C58B STA ($4B),Y ; Pointer to temp storage in RAM for FN DEF, TAN, &c
C58D RTS
; strd Evaluate <str$>
C58E JSR $BD87 ; -Confirm numeric mode
C591 LDY #$00
C593 JSR $CF95
C596 PLA
C597 PLA
C598 iC598 LDA #$FF
C59A LDY #$00
C59C BEQ $C5B0 ; strlit Set Up String
C59E iC59E LDX $61
C5A0 LDY $62
C5A2 STX $4D ; Pointer to string, length and garbage collect constant
C5A4 STY $4E
C5A6 iC5A6 JSR $C61D ; getspa Allocate Space for String
C5A9 STX $5F ; Floating Accum. #1: Mantissa
C5AB STY $60
C5AD STA $5E ; Floating-Point Accumulator #1: Exponent
C5AF RTS
; strlit Set Up String
C5B0 iC5B0 LDX #$22
C5B2 STX $03 ; Search Character
C5B4 STX $04 ; Flag: Scan for Quote at End of String
C5B6 iC5B6 STA $6C ; Sign Comparison Result: Accum. # 1 vs #2
C5B8 STY $6D ; Floating Accum. #1. Low-Order (Rounding)
C5BA STA $5F ; Floating Accum. #1: Mantissa
C5BC STY $60
C5BE LDY #$FF
C5C0 iC5C0 INY
C5C1 LDA ($6C),Y ; Sign Comparison Result: Accum. # 1 vs #2
C5C3 BEQ $C5D1
C5C5 CMP $03 ; Search Character
C5C7 BEQ $C5CD
C5C9 CMP $04 ; Flag: Scan for Quote at End of String
C5CB BNE $C5C0
C5CD iC5CD CMP #$22
C5CF BEQ $C5D2
C5D1 iC5D1 CLC
C5D2 iC5D2 STY $5E ; Floating-Point Accumulator #1: Exponent
C5D4 TYA
C5D5 ADC $6C ; Sign Comparison Result: Accum. # 1 vs #2
C5D7 STA $6E ; Pointer: Cassette Buffer
C5D9 LDX $6D ; Floating Accum. #1. Low-Order (Rounding)
C5DB BCC $C5DE
C5DD INX
C5DE iC5DE STX $6F
C5E0 LDA $6D ; Floating Accum. #1. Low-Order (Rounding)
C5E2 BEQ $C5E8
C5E4 CMP #$02
C5E6 BNE $C5F3
C5E8 iC5E8 TYA
C5E9 JSR $C59E
C5EC LDX $6C ; Sign Comparison Result: Accum. # 1 vs #2
C5EE LDY $6D ; Floating Accum. #1. Low-Order (Rounding)
C5F0 JSR $C79A
C5F3 iC5F3 LDX $13 ; Pointer Temporary String
C5F5 CPX #$1F
C5F7 BNE $C5FE ; putnw1 Save String Descriptor
C5F9 LDX #$C8
C5FB iC5FB JMP $B3CF ; error Error Routine
; putnw1 Save String Descriptor
C5FE iC5FE LDA $5E ; Floating-Point Accumulator #1: Exponent
C600 STA $00,X ; USR Function Jump Instr (4C)
C602 LDA $5F ; Floating Accum. #1: Mantissa
C604 STA $01,X ; USR Address [4: C373]
C606 LDA $60
C608 STA $02,X
C60A LDY #$00
C60C STX $61
C60E STY $62
C610 STY $6D ; Floating Accum. #1. Low-Order (Rounding)
C612 DEY
C613 STY $07 ; Data Type: $FF = String, $00 = Numeric
C615 STX $14 ; Last Temp String Address
C617 INX
C618 INX
C619 INX
C61A STX $13 ; Pointer Temporary String
C61C RTS
; getspa Allocate Space for String
C61D iC61D LSR $09 ; Flag: DATA scan/LlST quote/Garbage Coll
C61F iC61F TAX
C620 BEQ $C65A
C622 PHA
C623 LDA $30 ; Pointer: Bottom of String Storage
C625 SEC
C626 SBC #$02
C628 LDY $31
C62A BCS $C62D
C62C DEY
C62D iC62D STA $1F ; Utility Pointer Area
C62F STY $20
C631 TXA
C632 EOR #$FF
C634 SEC
C635 ADC $1F ; Utility Pointer Area
C637 BCS $C63A
C639 DEY
C63A iC63A CPY $2F
C63C BCC $C65B
C63E BNE $C644
C640 CMP $2E ; Pointer End of BASIC Arrays (+1)
C642 BCC $C65B
C644 iC644 STA $32 ; Utility String Pointer
C646 STY $33
C648 LDY #$01
C64A LDA #$FF
C64C STA ($1F),Y ; Utility Pointer Area
C64E DEY
C64F PLA
C650 STA ($1F),Y ; Utility Pointer Area
C652 LDX $32 ; Utility String Pointer
C654 LDY $33
C656 STX $30 ; Pointer: Bottom of String Storage
C658 STY $31
C65A iC65A RTS
C65B iC65B LDX #$4D
C65D LDA $09 ; Flag: DATA scan/LlST quote/Garbage Coll
C65F BMI $C5FB
C661 JSR $C66A ; garbag Garbage Collection
C664 SEC
C665 ROR $09 ; Flag: DATA scan/LlST quote/Garbage Coll
C667 PLA
C668 BNE $C61F
; garbag Garbage Collection
C66A iC66A LDY #$00
C66C STY $55
C66E LDA $34 ; Pointer: Highest Address Used by BASIC
C670 LDY $35
C672 STA $5C
C674 STA $4B ; Pointer to temp storage in RAM for FN DEF, TAN, &c
C676 STA $32 ; Utility String Pointer
C678 STY $5D
C67A STY $4C
C67C STY $33
C67E iC67E CPY $31
C680 BCC $C700
C682 BNE $C68A
C684 CMP $30 ; Pointer: Bottom of String Storage
C686 BEQ $C700
C688 BCC $C700
C68A iC68A LDX $55
C68C BMI $C693
C68E LDA #$02
C690 JSR $C735
C693 iC693 JSR $C724
C696 LDY #$01
C698 LDA ($4B),Y ; Pointer to temp storage in RAM for FN DEF, TAN, &c
C69A CMP #$FF
C69C BNE $C6A9
C69E iC69E DEY
C69F LDA ($4B),Y ; Pointer to temp storage in RAM for FN DEF, TAN, &c
C6A1 JSR $C726
C6A4 SEC
C6A5 ROR $55
C6A7 BNE $C67E
C6A9 iC6A9 JSR $C744
C6AC LDX $55
C6AE BPL $C703
C6B0 LSR $55
C6B2 iC6B2 LDY #$00
C6B4 LDA ($4B),Y ; Pointer to temp storage in RAM for FN DEF, TAN, &c
C6B6 STA ($5C),Y
C6B8 INY
C6B9 LDA ($4B),Y ; Pointer to temp storage in RAM for FN DEF, TAN, &c
C6BB STA ($5C),Y
C6BD DEY
C6BE LDA ($1F),Y ; Utility Pointer Area
C6C0 TAX
C6C1 JSR $C735
C6C4 STA $32 ; Utility String Pointer
C6C6 STY $33
C6C8 TXA
C6C9 JSR $C726
C6CC TXA
C6CD TAY
C6CE iC6CE DEY
C6CF LDA ($4B),Y ; Pointer to temp storage in RAM for FN DEF, TAN, &c
C6D1 STA ($5C),Y
C6D3 DEX
C6D4 BNE $C6CE
C6D6 LDY #$02
C6D8 iC6D8 LDA $005B,Y
C6DB STA ($1F),Y ; Utility Pointer Area
C6DD DEY
C6DE BNE $C6D8
C6E0 LDA $4B ; Pointer to temp storage in RAM for FN DEF, TAN, &c
C6E2 LDY $4C
C6E4 CPY $31
C6E6 BCC $C700
C6E8 BNE $C6F0
C6EA CMP $30 ; Pointer: Bottom of String Storage
C6EC BEQ $C700
C6EE BCC $C700
C6F0 iC6F0 JSR $C71F
C6F3 LDY #$01
C6F5 LDA ($4B),Y ; Pointer to temp storage in RAM for FN DEF, TAN, &c
C6F7 CMP #$FF
C6F9 BEQ $C69E
C6FB JSR $C744
C6FE BMI $C6B2
C700 iC700 JMP $C716
C703 iC703 LDY #$00
C705 LDA ($1F),Y ; Utility Pointer Area
C707 TAX
C708 JSR $C735
C70B STA $32 ; Utility String Pointer
C70D STY $33
C70F TXA
C710 JSR $C726
C713 JMP $C67E
C716 iC716 LDA $32 ; Utility String Pointer
C718 LDY $33
C71A STA $30 ; Pointer: Bottom of String Storage
C71C STY $31
C71E RTS
C71F iC71F LDA #$02
C721 JSR $C735
C724 iC724 LDA #$02
C726 iC726 EOR #$FF
C728 SEC
C729 ADC $4B ; Pointer to temp storage in RAM for FN DEF, TAN, &c
C72B LDY $4C
C72D BCS $C730
C72F DEY
C730 iC730 STA $4B ; Pointer to temp storage in RAM for FN DEF, TAN, &c
C732 STY $4C
C734 RTS
C735 iC735 EOR #$FF
C737 SEC
C738 ADC $5C
C73A LDY $5D
C73C BCS $C73F
C73E DEY
C73F iC73F STA $5C
C741 STY $5D
C743 RTS
C744 iC744 LDY #$01
C746 iC746 LDA ($4B),Y ; Pointer to temp storage in RAM for FN DEF, TAN, &c
C748 STA $001F,Y ; Utility Pointer Area
C74B DEY
C74C BPL $C746
C74E RTS
; cat Concatenate Two Strings
C74F iC74F LDA $62
C751 PHA
C752 LDA $61
C754 PHA
C755 JSR $BE81 ; eval Evaluate Single Term
C758 JSR $BD89 ; -Confirm string mode
C75B PLA
C75C STA $6C ; Sign Comparison Result: Accum. # 1 vs #2
C75E PLA
C75F STA $6D ; Floating Accum. #1. Low-Order (Rounding)
C761 LDY #$00
C763 LDA ($6C),Y ; Sign Comparison Result: Accum. # 1 vs #2
C765 CLC
C766 ADC ($61),Y
C768 BCC $C76F
C76A LDX #$B0
C76C JMP $B3CF ; error Error Routine
C76F iC76F JSR $C59E
C772 JSR $C78C ; movins Store String in High RAM
C775 LDA $4D ; Pointer to string, length and garbage collect constant
C777 LDY $4E
C779 JSR $C7BC
C77C JSR $C79E
C77F LDA $6C ; Sign Comparison Result: Accum. # 1 vs #2
C781 LDY $6D ; Floating Accum. #1. Low-Order (Rounding)
C783 JSR $C7BC
C786 JSR $C5F3
C789 JMP $BDB2
; movins Store String in High RAM
C78C iC78C LDY #$00
C78E LDA ($6C),Y ; Sign Comparison Result: Accum. # 1 vs #2
C790 PHA
C791 INY
C792 LDA ($6C),Y ; Sign Comparison Result: Accum. # 1 vs #2
C794 TAX
C795 INY
C796 LDA ($6C),Y ; Sign Comparison Result: Accum. # 1 vs #2
C798 TAY
C799 PLA
C79A iC79A STX $1F ; Utility Pointer Area
C79C STY $20
C79E iC79E TAY
C79F BEQ $C7AB
C7A1 PHA
C7A2 iC7A2 DEY
C7A3 LDA ($1F),Y ; Utility Pointer Area
C7A5 STA ($32),Y ; Utility String Pointer
C7A7 TYA
C7A8 BNE $C7A2
C7AA PLA
C7AB iC7AB CLC
C7AC ADC $32 ; Utility String Pointer
C7AE STA $32 ; Utility String Pointer
C7B0 BCC $C7B4
C7B2 INC $33
C7B4 iC7B4 RTS
; frestr Perform String Housekeeping
C7B5 iC7B5 JSR $BD89 ; -Confirm string mode
C7B8 iC7B8 LDA $61
C7BA LDY $62
C7BC iC7BC STA $1F ; Utility Pointer Area
C7BE STY $20
C7C0 JSR $C811 ; frefac Clean Descriptor Stack
C7C3 BNE $C7FE
C7C5 JSR $BA4E ; ?
C7C8 BCC $C7FE
C7CA DEY
C7CB LDA #$FF
C7CD STA ($1F),Y ; Utility Pointer Area
C7CF DEY
C7D0 TXA
C7D1 STA ($1F),Y ; Utility Pointer Area
C7D3 PHA
C7D4 EOR #$FF
C7D6 SEC
C7D7 ADC $1F ; Utility Pointer Area
C7D9 LDY $20
C7DB BCS $C7DE
C7DD DEY
C7DE iC7DE STA $1F ; Utility Pointer Area
C7E0 STY $20
C7E2 TAX
C7E3 PLA
C7E4 CPY $31
C7E6 BNE $C821
C7E8 CPX $30 ; Pointer: Bottom of String Storage
C7EA BNE $C821
C7EC PHA
C7ED SEC
C7EE ADC $30 ; Pointer: Bottom of String Storage
C7F0 STA $30 ; Pointer: Bottom of String Storage
C7F2 BCC $C7F6
C7F4 INC $31
C7F6 iC7F6 INC $30 ; Pointer: Bottom of String Storage
C7F8 BNE $C7FC
C7FA INC $31
C7FC iC7FC PLA
C7FD RTS
C7FE iC7FE LDY #$00
C800 LDA ($1F),Y ; Utility Pointer Area
C802 PHA
C803 INY
C804 LDA ($1F),Y ; Utility Pointer Area
C806 TAX
C807 INY
C808 LDA ($1F),Y ; Utility Pointer Area
C80A TAY
C80B STX $1F ; Utility Pointer Area
C80D STY $20
C80F PLA
C810 RTS
; frefac Clean Descriptor Stack
C811 iC811 CPY $15
C813 BNE $C821
C815 CMP $14 ; Last Temp String Address
C817 BNE $C821
C819 STA $13 ; Pointer Temporary String
C81B SBC #$03
C81D STA $14 ; Last Temp String Address
C81F LDY #$00
C821 iC821 RTS
; chrd Evaluate <chr$>
C822 JSR $C8D7
C825 TXA
C826 PHA
C827 LDA #$01
C829 JSR $C5A6
C82C PLA
C82D LDY #$00
C82F STA ($5F),Y ; Floating Accum. #1: Mantissa
C831 PLA
C832 PLA
C833 JMP $C5F3
; leftd Evaluate <left$>
C836 JSR $C897 ; pream Pull String Parameters
C839 CMP ($4D),Y ; Pointer to string, length and garbage collect constant
C83B TYA
C83C iC83C BCC $C842
C83E LDA ($4D),Y ; Pointer to string, length and garbage collect constant
C840 TAX
C841 TYA
C842 iC842 PHA
C843 iC843 TXA
C844 iC844 PHA
C845 JSR $C5A6
C848 LDA $4D ; Pointer to string, length and garbage collect constant
C84A LDY $4E
C84C JSR $C7BC
C84F PLA
C850 TAY
C851 PLA
C852 CLC
C853 ADC $1F ; Utility Pointer Area
C855 STA $1F ; Utility Pointer Area
C857 BCC $C85B
C859 INC $20
C85B iC85B TYA
C85C JSR $C79E
C85F JMP $C5F3
; rightd Evaluate <right$>
C862 JSR $C897 ; pream Pull String Parameters
C865 CLC
C866 SBC ($4D),Y ; Pointer to string, length and garbage collect constant
C868 EOR #$FF
C86A JMP $C83C
; midd Evaluate <mid$>
C86D LDA #$FF
C86F STA $62
C871 JSR $0076 ; Entry to Get Same Byte of Text Again
C874 CMP #$29
C876 BEQ $C87E
C878 JSR $BEF5 ; -Test comma-
C87B JSR $C8D4 ; -Eval Byte Parameter
C87E iC87E JSR $C897 ; pream Pull String Parameters
C881 BEQ $C8CE
C883 DEX
C884 TXA
C885 PHA
C886 CLC
C887 LDX #$00
C889 SBC ($4D),Y ; Pointer to string, length and garbage collect constant
C88B BCS $C843
C88D EOR #$FF
C88F CMP $62
C891 BCC $C844
C893 LDA $62
C895 BCS $C844
; pream Pull String Parameters
C897 iC897 JSR $BEEF ; chkcls Confirm Character
C89A PLA
C89B TAY
C89C PLA
C89D STA $52
C89F PLA
C8A0 PLA
C8A1 PLA
C8A2 TAX
C8A3 PLA
C8A4 STA $4D ; Pointer to string, length and garbage collect constant
C8A6 PLA
C8A7 STA $4E
C8A9 LDA $52
C8AB PHA
C8AC TYA
C8AD PHA
C8AE LDY #$00
C8B0 TXA
C8B1 RTS
; len Evaluate <len>
C8B2 JSR $C8B8 ; len1 Exit String Mode
C8B5 JMP $C4CB
; len1 Exit String Mode
C8B8 iC8B8 JSR $C7B5 ; frestr Perform String Housekeeping
C8BB LDX #$00
C8BD STX $07 ; Data Type: $FF = String, $00 = Numeric
C8BF TAY
C8C0 RTS
; asc Evaluate <asc>
C8C1 JSR $C8B8 ; len1 Exit String Mode
C8C4 BEQ $C8CE
C8C6 LDY #$00
C8C8 LDA ($1F),Y ; Utility Pointer Area
C8CA TAY
C8CB JMP $C4CB
C8CE iC8CE JMP $C373 ; - ?ILLEGAL QUANTITY
; gtbytc Evaluate Text to 1 Byte in XR
C8D1 iC8D1 JSR $0070 ; Subroutine: Get Next Byte of BASIC Text
; -Eval Byte Parameter
C8D4 iC8D4 JSR $BD84 ; frmnum Confirm Result
C8D7 iC8D7 JSR $C2E3
C8DA LDX $61
C8DC BNE $C8CE
C8DE LDX $62
C8E0 JMP $0076 ; Entry to Get Same Byte of Text Again
; val Evaluate <val>
C8E3 JSR $C8B8 ; len1 Exit String Mode
C8E6 BNE $C8EB ; strval Convert ASCII String to Flpt
C8E8 JMP $CA2D
; strval Convert ASCII String to Flpt
C8EB iC8EB LDX $77 ; Pointer: Current Byte of BASIC Text
C8ED LDY $78
C8EF STX $6E ; Pointer: Cassette Buffer
C8F1 STY $6F
C8F3 LDX $1F ; Utility Pointer Area
C8F5 STX $77 ; Pointer: Current Byte of BASIC Text
C8F7 CLC
C8F8 ADC $1F ; Utility Pointer Area
C8FA STA $21
C8FC LDX $20
C8FE STX $78
C900 BCC $C903
C902 INX
C903 iC903 STX $22
C905 LDY #$00
C907 LDA ($21),Y
C909 PHA
C90A TYA
C90B STA ($21),Y
C90D JSR $0076 ; Entry to Get Same Byte of Text Again
C910 JSR $CE29 ; fin Convert ASCII String to a Number in FAC#1
C913 PLA
C914 LDY #$00
C916 STA ($21),Y
C918 iC918 LDX $6E ; Pointer: Cassette Buffer
C91A LDY $6F
C91C STX $77 ; Pointer: Current Byte of BASIC Text
C91E STY $78
C920 RTS
; getnum Get parameters for POKE/WAIT
C921 iC921 JSR $BD84 ; frmnum Confirm Result
C924 JSR $C92D ; getadr Convert FAC#1 to Integer in LINNUM
C927 iC927 JSR $BEF5 ; -Test comma-
C92A JMP $C8D4 ; -Eval Byte Parameter
; getadr Convert FAC#1 to Integer in LINNUM
C92D iC92D LDA $63 ; Floating Accum. #1: Sign
C92F BMI $C8CE
C931 LDA $5E ; Floating-Point Accumulator #1: Exponent
C933 CMP #$91
C935 BCS $C8CE
C937 JSR $CDD1 ; qint Convert FAC#1 to Integer
C93A LDA $61
C93C LDY $62
C93E STY $11 ; Temp: Integer Value
C940 STA $12
C942 RTS
; peek Evaluate <peek>
C943 LDA $12
C945 PHA
C946 LDA $11 ; Temp: Integer Value
C948 PHA
C949 JSR $C92D ; getadr Convert FAC#1 to Integer in LINNUM
C94C LDY #$00
C94E LDA ($11),Y ; Temp: Integer Value
C950 TAY
C951 PLA
C952 STA $11 ; Temp: Integer Value
C954 PLA
C955 STA $12
C957 JMP $C4CB
; poke Perform [poke]
C95A JSR $C921 ; getnum Get parameters for POKE/WAIT
C95D TXA
C95E LDY #$00
C960 STA ($11),Y ; Temp: Integer Value
C962 RTS
; wait Perform [wait]
C963 JSR $C921 ; getnum Get parameters for POKE/WAIT
C966 STX $46 ; Pointer: Index Variable for FOR/NEXT
C968 LDX #$00
C96A JSR $0076 ; Entry to Get Same Byte of Text Again
C96D BEQ $C972
C96F JSR $C927
C972 iC972 STX $47
C974 LDY #$00
C976 iC976 LDA ($11),Y ; Temp: Integer Value
C978 EOR $47
C97A AND $46 ; Pointer: Index Variable for FOR/NEXT
C97C BEQ $C976
C97E iC97E RTS
; faddh Add 0.5 to FAC#1
C97F iC97F LDA #$C7
C981 LDY #$D0
C983 JMP $C99D ; fadd Perform Addition
; fsub Perform Subtraction
C986 iC986 JSR $CBC2 ; conupk Load FAC#2 From Memory
; - Evaluate <subtract>
C989 iC989 LDA $63 ; Floating Accum. #1: Sign
C98B EOR #$FF
C98D STA $63 ; Floating Accum. #1: Sign
C98F EOR $6B ; Floating Accum. #2: Sign
C991 STA $6C ; Sign Comparison Result: Accum. # 1 vs #2
C993 LDA $5E ; Floating-Point Accumulator #1: Exponent
C995 JMP $C9A0 ; - Evaluate <add>
; fadd5 Normalise Addition
C998 iC998 JSR $CACF
C99B BCC $C9D9
; fadd Perform Addition
C99D iC99D JSR $CBC2 ; conupk Load FAC#2 From Memory
; - Evaluate <add>
C9A0 iC9A0 BNE $C9A5
C9A2 JMP $CD32 ; movfa Copy FAC#2 into FAC#1
C9A5 iC9A5 LDX $6D ; Floating Accum. #1. Low-Order (Rounding)
C9A7 STX $53
C9A9 LDX #$66
C9AB LDA $66 ; Floating-Point Accumulator #2: Exponent
C9AD iC9AD TAY
C9AE BEQ $C97E
C9B0 SEC
C9B1 SBC $5E ; Floating-Point Accumulator #1: Exponent
C9B3 BEQ $C9D9
C9B5 BCC $C9C9
C9B7 STY $5E ; Floating-Point Accumulator #1: Exponent
C9B9 LDY $6B ; Floating Accum. #2: Sign
C9BB STY $63 ; Floating Accum. #1: Sign
C9BD EOR #$FF
C9BF ADC #$00
C9C1 LDY #$00
C9C3 STY $53
C9C5 LDX #$5E
C9C7 BNE $C9CD
C9C9 iC9C9 LDY #$00
C9CB STY $6D ; Floating Accum. #1. Low-Order (Rounding)
C9CD iC9CD CMP #$F9
C9CF BMI $C998 ; fadd5 Normalise Addition
C9D1 TAY
C9D2 LDA $6D ; Floating Accum. #1. Low-Order (Rounding)
C9D4 LSR $01,X ; USR Address [4: C373]
C9D6 JSR $CAE6
C9D9 iC9D9 BIT $6C
C9DB BPL $CA34
C9DD LDY #$5E
C9DF CPX #$66
C9E1 BEQ $C9E5
C9E3 LDY #$66
C9E5 iC9E5 SEC
C9E6 EOR #$FF
C9E8 ADC $53
C9EA STA $6D ; Floating Accum. #1. Low-Order (Rounding)
C9EC LDA $0004,Y ; Flag: Scan for Quote at End of String
C9EF SBC $04,X ; Flag: Scan for Quote at End of String
C9F1 STA $62
C9F3 LDA $0003,Y ; Search Character
C9F6 SBC $03,X ; Search Character
C9F8 STA $61
C9FA LDA $0002,Y
C9FD SBC $02,X
C9FF STA $60
CA01 LDA $0001,Y ; USR Address [4: C373]
CA04 SBC $01,X ; USR Address [4: C373]
CA06 STA $5F ; Floating Accum. #1: Mantissa
CA08 iCA08 BCS $CA0D
CA0A JSR $CA7D ; negfac 2's Complement FAC#1
CA0D iCA0D LDY #$00
CA0F TYA
CA10 CLC
CA11 iCA11 LDX $5F ; Floating Accum. #1: Mantissa
CA13 BNE $CA5F
CA15 LDX $60
CA17 STX $5F ; Floating Accum. #1: Mantissa
CA19 LDX $61
CA1B STX $60
CA1D LDX $62
CA1F STX $61
CA21 LDX $6D ; Floating Accum. #1. Low-Order (Rounding)
CA23 STX $62
CA25 STY $6D ; Floating Accum. #1. Low-Order (Rounding)
CA27 ADC #$08
CA29 CMP #$20
CA2B BNE $CA11
CA2D iCA2D LDA #$00
CA2F iCA2F STA $5E ; Floating-Point Accumulator #1: Exponent
CA31 iCA31 STA $63 ; Floating Accum. #1: Sign
CA33 RTS
CA34 iCA34 ADC $53
CA36 STA $6D ; Floating Accum. #1. Low-Order (Rounding)
CA38 LDA $62
CA3A ADC $6A
CA3C STA $62
CA3E LDA $61
CA40 ADC $69
CA42 STA $61
CA44 LDA $60
CA46 ADC $68
CA48 STA $60
CA4A LDA $5F ; Floating Accum. #1: Mantissa
CA4C ADC $67 ; Floating Accum. #2: Mantissa
CA4E STA $5F ; Floating Accum. #1: Mantissa
CA50 JMP $CA6C
CA53 iCA53 ADC #$01
CA55 ASL $6D ; Floating Accum. #1. Low-Order (Rounding)
CA57 ROL $62
CA59 ROL $61
CA5B ROL $60
CA5D ROL $5F ; Floating Accum. #1: Mantissa
CA5F iCA5F BPL $CA53
CA61 SEC
CA62 SBC $5E ; Floating-Point Accumulator #1: Exponent
CA64 BCS $CA2D
CA66 EOR #$FF
CA68 ADC #$01
CA6A STA $5E ; Floating-Point Accumulator #1: Exponent
CA6C iCA6C BCC $CA7C
CA6E iCA6E INC $5E ; Floating-Point Accumulator #1: Exponent
CA70 BEQ $CAB4 ; overr Output ?OVERFLOW Error
CA72 ROR $5F ; Floating Accum. #1: Mantissa
CA74 ROR $60
CA76 ROR $61
CA78 ROR $62
CA7A ROR $6D ; Floating Accum. #1. Low-Order (Rounding)
CA7C iCA7C RTS
; negfac 2's Complement FAC#1
CA7D iCA7D LDA $63 ; Floating Accum. #1: Sign
CA7F EOR #$FF
CA81 STA $63 ; Floating Accum. #1: Sign
CA83 iCA83 LDA $5F ; Floating Accum. #1: Mantissa
CA85 EOR #$FF
CA87 STA $5F ; Floating Accum. #1: Mantissa
CA89 LDA $60
CA8B EOR #$FF
CA8D STA $60
CA8F LDA $61
CA91 EOR #$FF
CA93 STA $61
CA95 LDA $62
CA97 EOR #$FF
CA99 STA $62
CA9B LDA $6D ; Floating Accum. #1. Low-Order (Rounding)
CA9D EOR #$FF
CA9F STA $6D ; Floating Accum. #1. Low-Order (Rounding)
CAA1 INC $6D ; Floating Accum. #1. Low-Order (Rounding)
CAA3 BNE $CAB3
CAA5 iCAA5 INC $62
CAA7 BNE $CAB3
CAA9 INC $61
CAAB BNE $CAB3
CAAD INC $60
CAAF BNE $CAB3
CAB1 INC $5F ; Floating Accum. #1: Mantissa
CAB3 iCAB3 RTS
; overr Output ?OVERFLOW Error
CAB4 iCAB4 LDX #$45
CAB6 JMP $B3CF ; error Error Routine
; mulshf Multiply by Zero Byte
CAB9 iCAB9 LDX #$22
CABB iCABB LDY $04,X ; Flag: Scan for Quote at End of String
CABD STY $6D ; Floating Accum. #1. Low-Order (Rounding)
CABF LDY $03,X ; Search Character
CAC1 STY $04,X ; Flag: Scan for Quote at End of String
CAC3 LDY $02,X
CAC5 STY $03,X ; Search Character
CAC7 LDY $01,X ; USR Address [4: C373]
CAC9 STY $02,X
CACB LDY $65 ; Floating -accum. #1: Overflow Digit
CACD STY $01,X ; USR Address [4: C373]
CACF iCACF ADC #$08
CAD1 BMI $CABB
CAD3 BEQ $CABB
CAD5 SBC #$08
CAD7 TAY
CAD8 LDA $6D ; Floating Accum. #1. Low-Order (Rounding)
CADA BCS $CAF0
CADC iCADC ASL $01,X ; USR Address [4: C373]
CADE BCC $CAE2
CAE0 INC $01,X ; USR Address [4: C373]
CAE2 iCAE2 ROR $01,X ; USR Address [4: C373]
CAE4 ROR $01,X ; USR Address [4: C373]
CAE6 iCAE6 ROR $02,X
CAE8 ROR $03,X ; Search Character
CAEA ROR $04,X ; Flag: Scan for Quote at End of String
CAEC ROR
CAED INY
CAEE BNE $CADC
CAF0 iCAF0 CLC
CAF1 RTS
; fone Table of Flpt Constants DATA
;caf2 1.00
;caf7 #03 (counter)
;caf8 0.434255942
;cafd 0.57658454
;cb02 0.961800759
;cb07 2.885390073
;cb0c 0.707106781 SQR(0.5)
;cb11 1.41421356 SRQ(2)
;cb16 -0.5
;cb1b 0.693147181 LOG(2)
;
CAF2 .byte 81 00 00 00 00 03 7F 5E ;.......^
CAFA .byte 56 CB 79 80 13 9B 0B 64 ;vKY....D
CB02 .byte 80 76 38 93 16 82 38 AA ;.V8...8.
CB0A .byte 3B 20 80 35 04 F3 34 81 ;; .5..4.
CB12 .byte 35 04 F3 34 80 80 00 00 ;5..4....
CB1A .byte 00 80 31 72 17 F8 ;..1R..
; log Evaluate <log>
CB20 iCB20 JSR $CD61 ; sign Check Sign of FAC#1
CB23 BEQ $CB27
CB25 BPL $CB2A
CB27 iCB27 JMP $C373 ; - ?ILLEGAL QUANTITY
CB2A iCB2A LDA $5E ; Floating-Point Accumulator #1: Exponent
CB2C SBC #$7F
CB2E PHA
CB2F LDA #$80
CB31 STA $5E ; Floating-Point Accumulator #1: Exponent
CB33 LDA #$0C
CB35 LDY #$CB
CB37 JSR $C99D ; fadd Perform Addition
CB3A LDA #$11
CB3C LDY #$CB
CB3E JSR $CC45 ; fdivt Divide FAC#2 by FAC#1
CB41 LDA #$F2
CB43 LDY #$CA
CB45 JSR $C986 ; fsub Perform Subtraction
CB48 LDA #$F7
CB4A LDY #$CA
CB4C JSR $D1D7 ; polyx Series Evaluation
CB4F LDA #$16
CB51 LDY #$CB
CB53 JSR $C99D ; fadd Perform Addition
CB56 PLA
CB57 JSR $CEB4
CB5A LDA #$1B
CB5C LDY #$CB
; fmult Perform Multiply
CB5E iCB5E JSR $CBC2 ; conupk Load FAC#2 From Memory
; - Evaluate <multiply>
CB61 BNE $CB66
CB63 JMP $CBC1
CB66 iCB66 JSR $CBED ; muldiv Test Both Accumulators
CB69 LDA #$00
CB6B STA $23 ; Floating-Point Product of Multiply
CB6D STA $24
CB6F STA $25
CB71 STA $26
CB73 LDA $6D ; Floating Accum. #1. Low-Order (Rounding)
CB75 JSR $CB8F ; mulply Multiply by a Byte
CB78 LDA $62
CB7A JSR $CB8F ; mulply Multiply by a Byte
CB7D LDA $61
CB7F JSR $CB8F ; mulply Multiply by a Byte
CB82 LDA $60
CB84 JSR $CB8F ; mulply Multiply by a Byte
CB87 LDA $5F ; Floating Accum. #1: Mantissa
CB89 JSR $CB94
CB8C JMP $CCC5
; mulply Multiply by a Byte
CB8F iCB8F BNE $CB94
CB91 JMP $CAB9 ; mulshf Multiply by Zero Byte
CB94 iCB94 LSR
CB95 ORA #$80
CB97 iCB97 TAY
CB98 BCC $CBB3
CB9A CLC
CB9B LDA $26
CB9D ADC $6A
CB9F STA $26
CBA1 LDA $25
CBA3 ADC $69
CBA5 STA $25
CBA7 LDA $24
CBA9 ADC $68
CBAB STA $24
CBAD LDA $23 ; Floating-Point Product of Multiply
CBAF ADC $67 ; Floating Accum. #2: Mantissa
CBB1 STA $23 ; Floating-Point Product of Multiply
CBB3 iCBB3 ROR $23 ; Floating-Point Product of Multiply
CBB5 ROR $24
CBB7 ROR $25
CBB9 ROR $26
CBBB ROR $6D ; Floating Accum. #1. Low-Order (Rounding)
CBBD TYA
CBBE LSR
CBBF BNE $CB97
CBC1 iCBC1 RTS
; conupk Load FAC#2 From Memory
CBC2 iCBC2 STA $1F ; Utility Pointer Area
CBC4 STY $20
CBC6 LDY #$04
CBC8 LDA ($1F),Y ; Utility Pointer Area
CBCA STA $6A
CBCC DEY
CBCD LDA ($1F),Y ; Utility Pointer Area
CBCF STA $69
CBD1 DEY
CBD2 LDA ($1F),Y ; Utility Pointer Area
CBD4 STA $68
CBD6 DEY
CBD7 LDA ($1F),Y ; Utility Pointer Area
CBD9 STA $6B ; Floating Accum. #2: Sign
CBDB EOR $63 ; Floating Accum. #1: Sign
CBDD STA $6C ; Sign Comparison Result: Accum. # 1 vs #2
CBDF LDA $6B ; Floating Accum. #2: Sign
CBE1 ORA #$80
CBE3 STA $67 ; Floating Accum. #2: Mantissa
CBE5 DEY
CBE6 LDA ($1F),Y ; Utility Pointer Area
CBE8 STA $66 ; Floating-Point Accumulator #2: Exponent
CBEA LDA $5E ; Floating-Point Accumulator #1: Exponent
CBEC RTS
; muldiv Test Both Accumulators
CBED iCBED LDA $66 ; Floating-Point Accumulator #2: Exponent
CBEF iCBEF BEQ $CC10
CBF1 CLC
CBF2 ADC $5E ; Floating-Point Accumulator #1: Exponent
CBF4 BCC $CBFA
CBF6 BMI $CC15
CBF8 CLC
CBF9 BIT $1410
; *** CBF9: ADDRESS DIFFER. This may indicate misassembly ***
CBFC ADC #$80
CBFE STA $5E ; Floating-Point Accumulator #1: Exponent
CC00 BNE $CC05
CC02 JMP $CA31
CC05 iCC05 LDA $6C ; Sign Comparison Result: Accum. # 1 vs #2
CC07 STA $63 ; Floating Accum. #1: Sign
CC09 RTS
; mldvex Overflow / Underflow
CC0A iCC0A LDA $63 ; Floating Accum. #1: Sign
CC0C EOR #$FF
CC0E BMI $CC15
CC10 iCC10 PLA
CC11 PLA
CC12 JMP $CA2D
CC15 iCC15 JMP $CAB4 ; overr Output ?OVERFLOW Error
; mul10 Multiply FAC#1 by 10
CC18 iCC18 JSR $CD42 ; movaf Copy FAC#1 into FAC#2
CC1B TAX
CC1C BEQ $CC2E
CC1E CLC
CC1F ADC #$02
CC21 BCS $CC15
CC23 iCC23 LDX #$00
CC25 STX $6C ; Sign Comparison Result: Accum. # 1 vs #2
CC27 JSR $C9AD
CC2A INC $5E ; Floating-Point Accumulator #1: Exponent
CC2C BEQ $CC15
CC2E iCC2E RTS
; tenc Constant 10 in Flpt DATA
CC2F .byte 84 20 00 00 00 ;. ...
; div10 Divide FAC#1 by 10
CC34 iCC34 JSR $CD42 ; movaf Copy FAC#1 into FAC#2
CC37 LDA #$2F
CC39 LDY #$CC
CC3B LDX #$00
; fdiv Divide FAC#2 by Flpt at (AC/YR)
CC3D iCC3D STX $6C ; Sign Comparison Result: Accum. # 1 vs #2
CC3F JSR $CCD8 ; movfm Load FAC#1 From Memory
CC42 JMP $CC48 ; - Evaluate <divide>
; fdivt Divide FAC#2 by FAC#1
CC45 iCC45 JSR $CBC2 ; conupk Load FAC#2 From Memory
; - Evaluate <divide>
CC48 iCC48 BEQ $CCC0
CC4A JSR $CD51 ; round Round FAC#1
CC4D LDA #$00
CC4F SEC
CC50 SBC $5E ; Floating-Point Accumulator #1: Exponent
CC52 STA $5E ; Floating-Point Accumulator #1: Exponent
CC54 JSR $CBED ; muldiv Test Both Accumulators
CC57 INC $5E ; Floating-Point Accumulator #1: Exponent
CC59 BEQ $CC15
CC5B LDX #$FC
CC5D LDA #$01
CC5F iCC5F LDY $67 ; Floating Accum. #2: Mantissa
CC61 CPY $5F ; Floating Accum. #1: Mantissa
CC63 BNE $CC75
CC65 LDY $68
CC67 CPY $60
CC69 BNE $CC75
CC6B LDY $69
CC6D CPY $61
CC6F BNE $CC75
CC71 LDY $6A
CC73 CPY $62
CC75 iCC75 PHP
CC76 ROL
CC77 BCC $CC82
CC79 INX
CC7A STA $26,X
CC7C BEQ $CCB0
CC7E BPL $CCB4
CC80 LDA #$01
CC82 iCC82 PLP
CC83 BCS $CC93
CC85 iCC85 ASL $6A
CC87 ROL $69
CC89 ROL $68
CC8B ROL $67 ; Floating Accum. #2: Mantissa
CC8D BCS $CC75
CC8F BMI $CC5F
CC91 BPL $CC75
CC93 iCC93 TAY
CC94 LDA $6A
CC96 SBC $62
CC98 STA $6A
CC9A LDA $69
CC9C SBC $61
CC9E STA $69
CCA0 LDA $68
CCA2 SBC $60
CCA4 STA $68
CCA6 LDA $67 ; Floating Accum. #2: Mantissa
CCA8 SBC $5F ; Floating Accum. #1: Mantissa
CCAA STA $67 ; Floating Accum. #2: Mantissa
CCAC TYA
CCAD JMP $CC85
CCB0 iCCB0 LDA #$40
CCB2 BNE $CC82
CCB4 iCCB4 ASL
CCB5 ASL
CCB6 ASL
CCB7 ASL
CCB8 ASL
CCB9 ASL
CCBA STA $6D ; Floating Accum. #1. Low-Order (Rounding)
CCBC PLP
CCBD JMP $CCC5
CCC0 iCCC0 LDX #$85
CCC2 JMP $B3CF ; error Error Routine
CCC5 iCCC5 LDA $23 ; Floating-Point Product of Multiply
CCC7 STA $5F ; Floating Accum. #1: Mantissa
CCC9 LDA $24
CCCB STA $60
CCCD LDA $25
CCCF STA $61
CCD1 LDA $26
CCD3 STA $62
CCD5 JMP $CA0D
; movfm Load FAC#1 From Memory
CCD8 iCCD8 STA $1F ; Utility Pointer Area
CCDA STY $20
CCDC LDY #$04
CCDE LDA ($1F),Y ; Utility Pointer Area
CCE0 STA $62
CCE2 DEY
CCE3 LDA ($1F),Y ; Utility Pointer Area
CCE5 STA $61
CCE7 DEY
CCE8 LDA ($1F),Y ; Utility Pointer Area
CCEA STA $60
CCEC DEY
CCED LDA ($1F),Y ; Utility Pointer Area
CCEF STA $63 ; Floating Accum. #1: Sign
CCF1 ORA #$80
CCF3 STA $5F ; Floating Accum. #1: Mantissa
CCF5 DEY
CCF6 LDA ($1F),Y ; Utility Pointer Area
CCF8 STA $5E ; Floating-Point Accumulator #1: Exponent
CCFA STY $6D ; Floating Accum. #1. Low-Order (Rounding)
CCFC RTS
; mov2f Store FAC#1 in Memory
CCFD iCCFD LDX #$59
CCFF BIT $54A2
; *** CCFF: ADDRESS DIFFER. This may indicate misassembly ***
CD02 LDY #$00
CD04 BEQ $CD0A ; - Store FAC#1 at (AC/YR)
CD06 iCD06 LDX $46 ; Pointer: Index Variable for FOR/NEXT
CD08 LDY $47
; - Store FAC#1 at (AC/YR)
CD0A iCD0A JSR $CD51 ; round Round FAC#1
CD0D STX $1F ; Utility Pointer Area
CD0F STY $20
CD11 LDY #$04
CD13 LDA $62
CD15 STA ($1F),Y ; Utility Pointer Area
CD17 DEY
CD18 LDA $61
CD1A STA ($1F),Y ; Utility Pointer Area
CD1C DEY
CD1D LDA $60
CD1F STA ($1F),Y ; Utility Pointer Area
CD21 DEY
CD22 LDA $63 ; Floating Accum. #1: Sign
CD24 ORA #$7F
CD26 AND $5F ; Floating Accum. #1: Mantissa
CD28 STA ($1F),Y ; Utility Pointer Area
CD2A DEY
CD2B LDA $5E ; Floating-Point Accumulator #1: Exponent
CD2D STA ($1F),Y ; Utility Pointer Area
CD2F STY $6D ; Floating Accum. #1. Low-Order (Rounding)
CD31 RTS
; movfa Copy FAC#2 into FAC#1
CD32 iCD32 LDA $6B ; Floating Accum. #2: Sign
CD34 iCD34 STA $63 ; Floating Accum. #1: Sign
CD36 LDX #$05
CD38 iCD38 LDA $65,X ; Floating -accum. #1: Overflow Digit
CD3A STA $5D,X
CD3C DEX
CD3D BNE $CD38
CD3F STX $6D ; Floating Accum. #1. Low-Order (Rounding)
CD41 RTS
; movaf Copy FAC#1 into FAC#2
CD42 iCD42 JSR $CD51 ; round Round FAC#1
CD45 iCD45 LDX #$06
CD47 iCD47 LDA $5D,X
CD49 STA $65,X ; Floating -accum. #1: Overflow Digit
CD4B DEX
CD4C BNE $CD47
CD4E STX $6D ; Floating Accum. #1. Low-Order (Rounding)
CD50 iCD50 RTS
; round Round FAC#1
CD51 iCD51 LDA $5E ; Floating-Point Accumulator #1: Exponent
CD53 BEQ $CD50
CD55 ASL $6D ; Floating Accum. #1. Low-Order (Rounding)
CD57 BCC $CD50
CD59 iCD59 JSR $CAA5
CD5C BNE $CD50
CD5E JMP $CA6E
; sign Check Sign of FAC#1
CD61 iCD61 LDA $5E ; Floating-Point Accumulator #1: Exponent
CD63 BEQ $CD6E
CD65 iCD65 LDA $63 ; Floating Accum. #1: Sign
CD67 iCD67 ROL
CD68 LDA #$FF
CD6A BCS $CD6E
CD6C LDA #$01
CD6E iCD6E RTS
; sgn Evaluate <sgn>
CD6F JSR $CD61 ; sign Check Sign of FAC#1
CD72 iCD72 STA $5F ; Floating Accum. #1: Mantissa
CD74 LDA #$00
CD76 STA $60
CD78 LDX #$88
CD7A iCD7A LDA $5F ; Floating Accum. #1: Mantissa
CD7C EOR #$FF
CD7E ROL
CD7F iCD7F LDA #$00
CD81 STA $62
CD83 STA $61
CD85 iCD85 STX $5E ; Floating-Point Accumulator #1: Exponent
CD87 STA $6D ; Floating Accum. #1. Low-Order (Rounding)
CD89 STA $63 ; Floating Accum. #1: Sign
CD8B JMP $CA08
; abs Evaluate <abs>
CD8E LSR $63 ; Floating Accum. #1: Sign
CD90 RTS
; fcomp Compare FAC#1 With Memory
CD91 iCD91 STA $21
CD93 iCD93 STY $22
CD95 LDY #$00
CD97 LDA ($21),Y
CD99 INY
CD9A TAX
CD9B BEQ $CD61 ; sign Check Sign of FAC#1
CD9D LDA ($21),Y
CD9F EOR $63 ; Floating Accum. #1: Sign
CDA1 BMI $CD65
CDA3 CPX $5E ; Floating-Point Accumulator #1: Exponent
CDA5 BNE $CDC8
CDA7 LDA ($21),Y
CDA9 ORA #$80
CDAB CMP $5F ; Floating Accum. #1: Mantissa
CDAD BNE $CDC8
CDAF INY
CDB0 LDA ($21),Y
CDB2 CMP $60
CDB4 BNE $CDC8
CDB6 INY
CDB7 LDA ($21),Y
CDB9 CMP $61
CDBB BNE $CDC8
CDBD INY
CDBE LDA #$7F
CDC0 CMP $6D ; Floating Accum. #1. Low-Order (Rounding)
CDC2 LDA ($21),Y
CDC4 SBC $62
CDC6 BEQ $CDF0
CDC8 iCDC8 LDA $63 ; Floating Accum. #1: Sign
CDCA BCC $CDCE
CDCC EOR #$FF
CDCE iCDCE JMP $CD67
; qint Convert FAC#1 to Integer
CDD1 iCDD1 LDA $5E ; Floating-Point Accumulator #1: Exponent
CDD3 BEQ $CE1F
CDD5 SEC
CDD6 SBC #$A0
CDD8 BIT $63
CDDA BPL $CDE5
CDDC TAX
CDDD LDA #$FF
CDDF STA $65 ; Floating -accum. #1: Overflow Digit
CDE1 JSR $CA83
CDE4 TXA
CDE5 iCDE5 LDX #$5E
CDE7 CMP #$F9
CDE9 BPL $CDF1
CDEB JSR $CACF
CDEE STY $65 ; Floating -accum. #1: Overflow Digit
CDF0 iCDF0 RTS
CDF1 iCDF1 TAY
CDF2 LDA $63 ; Floating Accum. #1: Sign
CDF4 AND #$80
CDF6 LSR $5F ; Floating Accum. #1: Mantissa
CDF8 ORA $5F ; Floating Accum. #1: Mantissa
CDFA STA $5F ; Floating Accum. #1: Mantissa
CDFC JSR $CAE6
CDFF STY $65 ; Floating -accum. #1: Overflow Digit
CE01 RTS
; int Evaluate <int>
CE02 iCE02 LDA $5E ; Floating-Point Accumulator #1: Exponent
CE04 CMP #$A0
CE06 BCS $CE28
CE08 JSR $CDD1 ; qint Convert FAC#1 to Integer
CE0B STY $6D ; Floating Accum. #1. Low-Order (Rounding)
CE0D LDA $63 ; Floating Accum. #1: Sign
CE0F STY $63 ; Floating Accum. #1: Sign
CE11 EOR #$80
CE13 ROL
CE14 LDA #$A0
CE16 STA $5E ; Floating-Point Accumulator #1: Exponent
CE18 LDA $62
CE1A STA $03 ; Search Character
CE1C JMP $CA08
CE1F iCE1F STA $5F ; Floating Accum. #1: Mantissa
CE21 STA $60
CE23 STA $61
CE25 STA $62
CE27 TAY
CE28 iCE28 RTS
; fin Convert ASCII String to a Number in FAC#1
CE29 iCE29 LDY #$00
CE2B LDX #$0A
CE2D iCE2D STY $5A,X
CE2F DEX
CE30 BPL $CE2D
CE32 BCC $CE43
CE34 CMP #$2D
CE36 BNE $CE3C
CE38 STX $64 ; Pointer: Series Evaluation Constant Pointer
CE3A BEQ $CE40
CE3C iCE3C CMP #$2B
CE3E BNE $CE45
CE40 iCE40 JSR $0070 ; Subroutine: Get Next Byte of BASIC Text
CE43 iCE43 BCC $CEA0
CE45 iCE45 CMP #$2E
CE47 BEQ $CE77
CE49 CMP #$45
CE4B BNE $CE7D
CE4D JSR $0070 ; Subroutine: Get Next Byte of BASIC Text
CE50 BCC $CE69
CE52 CMP #$AB
CE54 BEQ $CE64
CE56 CMP #$2D
CE58 BEQ $CE64
CE5A CMP #$AA
CE5C BEQ $CE66
CE5E CMP #$2B
CE60 BEQ $CE66
CE62 BNE $CE6B
CE64 iCE64 ROR $5D
CE66 iCE66 JSR $0070 ; Subroutine: Get Next Byte of BASIC Text
CE69 iCE69 BCC $CEC7
CE6B iCE6B BIT $5D
CE6D BPL $CE7D
CE6F LDA #$00
CE71 SEC
CE72 SBC $5B
CE74 JMP $CE7F
CE77 iCE77 ROR $5C
CE79 BIT $5C
CE7B BVC $CE40
CE7D iCE7D LDA $5B
CE7F iCE7F SEC
CE80 SBC $5A
CE82 STA $5B
CE84 BEQ $CE98
CE86 BPL $CE91
CE88 iCE88 JSR $CC34 ; div10 Divide FAC#1 by 10
CE8B INC $5B
CE8D BNE $CE88
CE8F BEQ $CE98
CE91 iCE91 JSR $CC18 ; mul10 Multiply FAC#1 by 10
CE94 DEC $5B
CE96 BNE $CE91
CE98 iCE98 LDA $64 ; Pointer: Series Evaluation Constant Pointer
CE9A BMI $CE9D
CE9C RTS
CE9D iCE9D JMP $D14B ; negop Negate FAC#1
CEA0 iCEA0 PHA
CEA1 BIT $5C
CEA3 BPL $CEA7
CEA5 INC $5A
CEA7 iCEA7 JSR $CC18 ; mul10 Multiply FAC#1 by 10
CEAA PLA
CEAB SEC
CEAC SBC #$30
CEAE JSR $CEB4
CEB1 JMP $CE40
CEB4 iCEB4 PHA
CEB5 JSR $CD42 ; movaf Copy FAC#1 into FAC#2
CEB8 PLA
CEB9 JSR $CD72
CEBC LDA $6B ; Floating Accum. #2: Sign
CEBE EOR $63 ; Floating Accum. #1: Sign
CEC0 STA $6C ; Sign Comparison Result: Accum. # 1 vs #2
CEC2 LDX $5E ; Floating-Point Accumulator #1: Exponent
CEC4 JMP $C9A0 ; - Evaluate <add>
CEC7 iCEC7 LDA $5B
CEC9 CMP #$0A
CECB BCC $CED6
CECD LDA #$64
CECF BIT $5D
CED1 BMI $CEE4
CED3 JMP $CAB4 ; overr Output ?OVERFLOW Error
CED6 iCED6 ASL
CED7 ASL
CED8 CLC
CED9 ADC $5B
CEDB ASL
CEDC CLC
CEDD LDY #$00
CEDF ADC ($77),Y ; Pointer: Current Byte of BASIC Text
CEE1 SEC
CEE2 SBC #$30
CEE4 iCEE4 STA $5B
CEE6 JMP $CE66
; n0999 String Conversion Constants DATA
;cee9 99999999.9
;ceee 999999999
;cef3 1000000000
;
CEE9 .byte 9B 3E BC 1F FD 9E 6E 6B ;.>....NK
CEF1 .byte 27 FD 9E 6E 6B 28 00 ;'..NK(.
; Unused EMPTY
CEF8 .byte F9 AA AA AA AA AA AA AA ;........
CF00 .byte AA AA AA AA AA AA AA AA ;........
CF08 .byte AA AA AA AA AA AA AA AA ;........
CF10 .byte AA AA AA AA AA AA AA AA ;........
CF18 .byte AA AA AA AA AA AA AA AA ;........
CF20 .byte AA AA AA AA AA AA AA AA ;........
CF28 .byte AA AA AA AA AA AA AA AA ;........
CF30 .byte AA AA AA AA AA AA AA AA ;........
CF38 .byte AA AA AA AA AA AA AA AA ;........
CF40 .byte AA AA AA AA AA AA AA AA ;........
CF48 .byte AA AA AA AA AA AA AA AA ;........
CF50 .byte AA AA AA AA AA AA AA AA ;........
CF58 .byte AA AA AA AA AA AA AA AA ;........
CF60 .byte AA AA AA AA AA AA AA AA ;........
CF68 .byte AA AA AA AA AA AA AA AA ;........
CF70 .byte AA AA AA AA AA AA AA AA ;........
; inprt Output 'IN' and Line Number
CF78 iCF78 LDA #$0D
CF7A LDY #$B3
CF7C JSR $CF90
CF7F LDA $37
CF81 LDX $36 ; Current BASIC Line Number
CF83 iCF83 STA $5F ; Floating Accum. #1: Mantissa
CF85 STX $60
CF87 LDX #$90
CF89 SEC
CF8A JSR $CD7F
CF8D JSR $CF93 ; fout Convert FAC#1 to ASCII String
CF90 iCF90 JMP $BB1D ; strout Output String
; fout Convert FAC#1 to ASCII String
CF93 iCF93 LDY #$01
CF95 iCF95 LDA #$20
CF97 BIT $63
CF99 BPL $CF9D
CF9B LDA #$2D
CF9D iCF9D STA $00FF,Y ; Not used
CFA0 STA $63 ; Floating Accum. #1: Sign
CFA2 STY $6E ; Pointer: Cassette Buffer
CFA4 INY
CFA5 LDA #$30
CFA7 LDX $5E ; Floating-Point Accumulator #1: Exponent
CFA9 BNE $CFAE
CFAB JMP $D0BA
CFAE iCFAE LDA #$00
CFB0 CPX #$80
CFB2 BEQ $CFB6
CFB4 BCS $CFBF
CFB6 iCFB6 LDA #$F3
CFB8 LDY #$CE
CFBA JSR $CB5E ; fmult Perform Multiply
CFBD LDA #$F7
CFBF iCFBF STA $5A
CFC1 iCFC1 LDA #$EE
CFC3 LDY #$CE
CFC5 JSR $CD91 ; fcomp Compare FAC#1 With Memory
CFC8 BEQ $CFE8
CFCA BPL $CFDE
CFCC iCFCC LDA #$E9
CFCE LDY #$CE
CFD0 JSR $CD91 ; fcomp Compare FAC#1 With Memory
CFD3 BEQ $CFD7
CFD5 BPL $CFE5
CFD7 iCFD7 JSR $CC18 ; mul10 Multiply FAC#1 by 10
CFDA DEC $5A
CFDC BNE $CFCC
CFDE iCFDE JSR $CC34 ; div10 Divide FAC#1 by 10
CFE1 INC $5A
CFE3 BNE $CFC1
CFE5 iCFE5 JSR $C97F ; faddh Add 0.5 to FAC#1
CFE8 iCFE8 JSR $CDD1 ; qint Convert FAC#1 to Integer
CFEB LDX #$01
CFED LDA $5A
CFEF CLC
CFF0 ADC #$0A
CFF2 BMI $CFFD
CFF4 CMP #$0B
CFF6 BCS $CFFE
CFF8 ADC #$FF
CFFA TAX
CFFB LDA #$02
CFFD iCFFD SEC
CFFE iCFFE SBC #$02
D000 STA $5B
D002 STX $5A
D004 TXA
D005 BEQ $D009
D007 BPL $D01C
D009 iD009 LDY $6E ; Pointer: Cassette Buffer
D00B LDA #$2E
D00D INY
D00E STA $00FF,Y ; Not used
D011 TXA
D012 BEQ $D01A
D014 LDA #$30
D016 INY
D017 STA $00FF,Y ; Not used
D01A iD01A STY $6E ; Pointer: Cassette Buffer
D01C iD01C LDY #$00
; foutim Convert TI to String
D01E iD01E LDX #$80
D020 iD020 LDA $62
D022 CLC
D023 ADC $D0CF,Y
D026 STA $62
D028 LDA $61
D02A ADC $D0CE,Y
D02D STA $61
D02F LDA $60
D031 ADC $D0CD,Y
D034 STA $60
D036 LDA $5F ; Floating Accum. #1: Mantissa
D038 ADC $D0CC,Y
D03B STA $5F ; Floating Accum. #1: Mantissa
D03D INX
D03E BCS $D044
D040 BPL $D020
D042 BMI $D046
D044 iD044 BMI $D020
D046 iD046 TXA
D047 BCC $D04D
D049 EOR #$FF
D04B ADC #$0A
D04D iD04D ADC #$2F
D04F INY
D050 INY
D051 INY
D052 INY
D053 STY $44 ; Pointer: Current BASIC Variable Data
D055 LDY $6E ; Pointer: Cassette Buffer
D057 INY
D058 TAX
D059 AND #$7F
D05B STA $00FF,Y ; Not used
D05E DEC $5A
D060 BNE $D068
D062 LDA #$2E
D064 INY
D065 STA $00FF,Y ; Not used
D068 iD068 STY $6E ; Pointer: Cassette Buffer
D06A LDY $44 ; Pointer: Current BASIC Variable Data
D06C TXA
D06D EOR #$FF
D06F AND #$80
D071 TAX
D072 CPY #$24
D074 BEQ $D07A
D076 CPY #$3C
D078 BNE $D020
D07A iD07A LDY $6E ; Pointer: Cassette Buffer
D07C iD07C LDA $00FF,Y ; Not used
D07F DEY
D080 CMP #$30
D082 BEQ $D07C
D084 CMP #$2E
D086 BEQ $D089
D088 INY
D089 iD089 LDA #$2B
D08B LDX $5B
D08D BEQ $D0BD
D08F BPL $D099
D091 LDA #$00
D093 SEC
D094 SBC $5B
D096 TAX
D097 LDA #$2D
D099 iD099 STA $0101,Y
D09C LDA #$45
D09E STA $0100,Y ; Micro-Processor System Stack Area
D0A1 TXA
D0A2 LDX #$2F
D0A4 SEC
D0A5 iD0A5 INX
D0A6 SBC #$0A
D0A8 BCS $D0A5
D0AA ADC #$3A
D0AC STA $0103,Y
D0AF TXA
D0B0 STA $0102,Y
D0B3 LDA #$00
D0B5 STA $0104,Y
D0B8 BEQ $D0C2
D0BA iD0BA STA $00FF,Y ; Not used
D0BD iD0BD LDA #$00
D0BF STA $0100,Y ; Micro-Processor System Stack Area
D0C2 iD0C2 LDA #$00
D0C4 LDY #$01
D0C6 RTS
; fhalf Table of Constants DATA
;d0c7 0.5
; This table is used in converting numbers to ascii.
;d0cc 4-byte powers of 10
;d0f0 TI Constants
;
D0C7 .byte 80 00 00 00 00 ;.....
D0CC sD0CC .byte FA ;.
D0CD sD0CD .byte 0A ;.
D0CE sD0CE .byte 1F ;.
D0CF sD0CF .byte 00 00 98 96 80 FF F0 BD ;........
D0D7 .byte C0 00 01 86 A0 FF FF D8 ;.......X
D0DF .byte F0 00 00 03 E8 FF FF FF ;........
D0E7 .byte 9C 00 00 00 0A FF FF FF ;........
D0EF .byte FF FF DF 0A 80 00 03 4B ;.......k
D0F7 .byte C0 FF FF 73 60 00 00 0E ;...S`...
D0FF .byte 10 FF FF FD A8 00 00 00 ;........
D107 .byte 3C ;<
; sqr Evaluate <sqr>
D108 JSR $CD42 ; movaf Copy FAC#1 into FAC#2
D10B LDA #$C7
D10D LDY #$D0
D10F JSR $CCD8 ; movfm Load FAC#1 From Memory
; fpwrt Evaluate <power>
D112 BEQ $D184 ; exp Evaluate <exp>
D114 LDA $66 ; Floating-Point Accumulator #2: Exponent
D116 BNE $D11B
D118 JMP $CA2F
D11B iD11B LDX #$4B
D11D LDY #$00
D11F JSR $CD0A ; - Store FAC#1 at (AC/YR)
D122 LDA $6B ; Floating Accum. #2: Sign
D124 BPL $D135
D126 JSR $CE02 ; int Evaluate <int>
D129 LDA #$4B
D12B LDY #$00
D12D JSR $CD91 ; fcomp Compare FAC#1 With Memory
D130 BNE $D135
D132 TYA
D133 LDY $03 ; Search Character
D135 iD135 JSR $CD34
D138 TYA
D139 PHA
D13A JSR $CB20 ; log Evaluate <log>
D13D LDA #$4B
D13F LDY #$00
D141 JSR $CB5E ; fmult Perform Multiply
D144 JSR $D184 ; exp Evaluate <exp>
D147 PLA
D148 LSR
D149 BCC $D155
; negop Negate FAC#1- Evaluate <greater>
D14B iD14B LDA $5E ; Floating-Point Accumulator #1: Exponent
D14D BEQ $D155
D14F LDA $63 ; Floating Accum. #1: Sign
D151 EOR #$FF
D153 STA $63 ; Floating Accum. #1: Sign
D155 iD155 RTS
; logeb2 Table of Constants DATA
;d156 1.44269504 (1/LOG to base 2 e)
;d15b #07 (counter)
;d15c 2.149875 E-5
;d161 1.435231 E-4
;d166 1.342263 E-3
;d16b 9.6414017 E-3
;d170 5.550513 E-2
;d175 2.402263 E-4
;d17a 6.931471 E-1
;d17f 1.00
;
D156 .byte 81 38 AA 3B 29 07 71 34 ;.8.;).Q4
D15E .byte 58 3E 56 74 16 7E B3 1B ;x>vT.~..
D166 .byte 77 2F EE E3 85 7A 1D 84 ;W/...Z..
D16E .byte 1C 2A 7C 63 59 58 0A 7E ;.*|Cyx.~
D176 .byte 75 FD E7 C6 80 31 72 18 ;U..F.1R.
D17E .byte 10 81 00 00 00 00 ;......
; exp Evaluate <exp>
D184 iD184 LDA #$56
D186 LDY #$D1
D188 JSR $CB5E ; fmult Perform Multiply
D18B LDA $6D ; Floating Accum. #1. Low-Order (Rounding)
D18D ADC #$50
D18F BCC $D194
D191 JSR $CD59
D194 iD194 STA $53
D196 JSR $CD45
D199 LDA $5E ; Floating-Point Accumulator #1: Exponent
D19B CMP #$88
D19D BCC $D1A2
D19F iD19F JSR $CC0A ; mldvex Overflow / Underflow
D1A2 iD1A2 JSR $CE02 ; int Evaluate <int>
D1A5 LDA $03 ; Search Character
D1A7 CLC
D1A8 ADC #$81
D1AA BEQ $D19F
D1AC SEC
D1AD SBC #$01
D1AF PHA
D1B0 LDX #$05
D1B2 iD1B2 LDA $66,X ; Floating-Point Accumulator #2: Exponent
D1B4 LDY $5E,X ; Floating-Point Accumulator #1: Exponent
D1B6 STA $5E,X ; Floating-Point Accumulator #1: Exponent
D1B8 STY $66,X ; Floating-Point Accumulator #2: Exponent
D1BA DEX
D1BB BPL $D1B2
D1BD LDA $53
D1BF STA $6D ; Floating Accum. #1. Low-Order (Rounding)
D1C1 JSR $C989 ; - Evaluate <subtract>
D1C4 JSR $D14B ; negop Negate FAC#1
D1C7 LDA #$5B
D1C9 LDY #$D1
D1CB JSR $D1ED
D1CE LDA #$00
D1D0 STA $6C ; Sign Comparison Result: Accum. # 1 vs #2
D1D2 PLA
D1D3 JSR $CBEF
D1D6 RTS
; polyx Series Evaluation
D1D7 iD1D7 STA $6E ; Pointer: Cassette Buffer
D1D9 STY $6F
D1DB JSR $CD00
D1DE LDA #$54
D1E0 JSR $CB5E ; fmult Perform Multiply
D1E3 JSR $D1F1
D1E6 LDA #$54
D1E8 LDY #$00
D1EA JMP $CB5E ; fmult Perform Multiply
D1ED iD1ED STA $6E ; Pointer: Cassette Buffer
D1EF STY $6F
D1F1 iD1F1 JSR $CCFD ; mov2f Store FAC#1 in Memory
D1F4 LDA ($6E),Y ; Pointer: Cassette Buffer
D1F6 STA $64 ; Pointer: Series Evaluation Constant Pointer
D1F8 LDY $6E ; Pointer: Cassette Buffer
D1FA INY
D1FB TYA
D1FC BNE $D200
D1FE INC $6F
D200 iD200 STA $6E ; Pointer: Cassette Buffer
D202 LDY $6F
D204 iD204 JSR $CB5E ; fmult Perform Multiply
D207 LDA $6E ; Pointer: Cassette Buffer
D209 LDY $6F
D20B CLC
D20C ADC #$05
D20E BCC $D211
D210 INY
D211 iD211 STA $6E ; Pointer: Cassette Buffer
D213 STY $6F
D215 JSR $C99D ; fadd Perform Addition
D218 LDA #$59
D21A LDY #$00
D21C DEC $64 ; Pointer: Series Evaluation Constant Pointer
D21E BNE $D204
D220 RTS
; rmulc Constants for RND DATA
D221 .byte 98 35 44 7A 68 28 B1 46 ;.5dZH(.f
; rnd Evaluate <rnd>
D229 JSR $CD61 ; sign Check Sign of FAC#1
D22C BMI $D25C
D22E BNE $D247
D230 LDA $E844
D233 STA $5F ; Floating Accum. #1: Mantissa
D235 LDA $E848
D238 STA $60
D23A LDA $E845
D23D STA $61
D23F LDA $E849
D242 STA $62
D244 JMP $D26C
D247 iD247 LDA #$88
D249 LDY #$00
D24B JSR $CCD8 ; movfm Load FAC#1 From Memory
D24E LDA #$21
D250 LDY #$D2
D252 JSR $CB5E ; fmult Perform Multiply
D255 LDA #$25
D257 LDY #$D2
D259 JSR $C99D ; fadd Perform Addition
D25C iD25C LDX $62
D25E LDA $5F ; Floating Accum. #1: Mantissa
D260 STA $62
D262 STX $5F ; Floating Accum. #1: Mantissa
D264 LDX $60
D266 LDA $61
D268 STA $60
D26A STX $61
D26C iD26C LDA #$00
D26E STA $63 ; Floating Accum. #1: Sign
D270 LDA $5E ; Floating-Point Accumulator #1: Exponent
D272 STA $6D ; Floating Accum. #1. Low-Order (Rounding)
D274 LDA #$80
D276 STA $5E ; Floating-Point Accumulator #1: Exponent
D278 JSR $CA0D
D27B LDX #$88
D27D LDY #$00
D27F iD27F JMP $CD0A ; - Store FAC#1 at (AC/YR)
; cos Evaluate <cos>
D282 LDA #$FE
D284 LDY #$D2
D286 JSR $C99D ; fadd Perform Addition
; sin Evaluate <sin>
D289 iD289 JSR $CD42 ; movaf Copy FAC#1 into FAC#2
D28C LDA #$03
D28E LDY #$D3
D290 LDX $6B ; Floating Accum. #2: Sign
D292 JSR $CC3D ; fdiv Divide FAC#2 by Flpt at (AC/YR)
D295 JSR $CD42 ; movaf Copy FAC#1 into FAC#2
D298 JSR $CE02 ; int Evaluate <int>
D29B LDA #$00
D29D STA $6C ; Sign Comparison Result: Accum. # 1 vs #2
D29F JSR $C989 ; - Evaluate <subtract>
D2A2 LDA #$08
D2A4 LDY #$D3
D2A6 JSR $C986 ; fsub Perform Subtraction
D2A9 LDA $63 ; Floating Accum. #1: Sign
D2AB PHA
D2AC BPL $D2BB
D2AE JSR $C97F ; faddh Add 0.5 to FAC#1
D2B1 LDA $63 ; Floating Accum. #1: Sign
D2B3 BMI $D2BE
D2B5 LDA $0C ; Flag TAN sign / Comparison Result
D2B7 EOR #$FF
D2B9 STA $0C ; Flag TAN sign / Comparison Result
D2BB iD2BB JSR $D14B ; negop Negate FAC#1
D2BE iD2BE LDA #$08
D2C0 LDY #$D3
D2C2 JSR $C99D ; fadd Perform Addition
D2C5 PLA
D2C6 BPL $D2CB
D2C8 JSR $D14B ; negop Negate FAC#1
D2CB iD2CB LDA #$0D
D2CD LDY #$D3
D2CF JMP $D1D7 ; polyx Series Evaluation
; tan Evaluate <tan>
D2D2 JSR $CD00
D2D5 LDA #$00
D2D7 STA $0C ; Flag TAN sign / Comparison Result
D2D9 JSR $D289 ; sin Evaluate <sin>
D2DC LDX #$4B
D2DE LDY #$00
D2E0 JSR $D27F
D2E3 LDA #$54
D2E5 LDY #$00
D2E7 JSR $CCD8 ; movfm Load FAC#1 From Memory
D2EA LDA #$00
D2EC STA $63 ; Floating Accum. #1: Sign
D2EE LDA $0C ; Flag TAN sign / Comparison Result
D2F0 JSR $D2FA
D2F3 LDA #$4B
D2F5 LDY #$00
D2F7 JMP $CC45 ; fdivt Divide FAC#2 by FAC#1
D2FA iD2FA PHA
D2FB JMP $D2BB
; pi2 Table of Trig Constants DATA
;d2fe 1.570796327 pi/2
;d303 6.28318531 pi*2
;d308 0.25
;
;d30d #05 (counter)
;d30e -14.3813907
;d313 42.0077971
;d318 -76.7041703
;d31d 81.6052237
;d322 -41.3417021
;d327 6.28318531
;
D2FE .byte 81 49 0F DA A2 83 49 0F ;.i.Z..i.
D306 .byte DA A2 7F 00 00 00 00 05 ;Z.......
D30E .byte 84 E6 1A 2D 1B 86 28 07 ;...-..(.
D316 .byte FB F8 87 99 68 89 01 87 ;....H...
D31E .byte 23 35 DF E1 86 A5 5D E7 ;#5....].
D326 .byte 28 83 49 0F DA A2 ;(.i.Z.
; atn Evaluate <atn>
D32C LDA $63 ; Floating Accum. #1: Sign
D32E PHA
D32F BPL $D334
D331 JSR $D14B ; negop Negate FAC#1
D334 iD334 LDA $5E ; Floating-Point Accumulator #1: Exponent
D336 PHA
D337 CMP #$81
D339 BCC $D342
D33B LDA #$F2
D33D LDY #$CA
D33F JSR $CC45 ; fdivt Divide FAC#2 by FAC#1
D342 iD342 LDA #$5C
D344 LDY #$D3
D346 JSR $D1D7 ; polyx Series Evaluation
D349 PLA
D34A CMP #$81
D34C BCC $D355
D34E LDA #$FE
D350 LDY #$D2
D352 JSR $C986 ; fsub Perform Subtraction
D355 iD355 PLA
D356 BPL $D35B
D358 JMP $D14B ; negop Negate FAC#1
D35B iD35B RTS
; atncon Table of ATN Constants DATA
;d35c #0b (counter)
;d35d -0.000684793912
;d362 0.00485094216
;d367 -0.161117018
;d36c 0.034209638
;d371 -0.0542791328
;d376 0.0724571965
;d37b -0.0898023954
;d380 0.110932413
;d385 -0.142839808
;d38a 0.19999912
;d38f -0.333333316
;d394 1.00
;
D35C .byte 0B 76 B3 83 BD D3 79 1E ;.V...SY.
D364 .byte F4 A6 F5 7B 83 FC B0 10 ;...{....
D36C .byte 7C 0C 1F 67 CA 7C DE 53 ;|..GJ|.s
D374 .byte CB C1 7D 14 64 70 4C 7D ;KA}.DPl}
D37C .byte B7 EA 51 7A 7D 63 30 88 ;..qZ}C0.
D384 .byte 7E 7E 92 44 99 3A 7E 4C ;~~.d.:~l
D38C .byte CC 91 C7 7F AA AA AA 13 ;L.G.....
D394 .byte 81 00 00 00 ;....
D398 sD398 .byte 00 ;.
; initat CHRGET For Zero-page
D399 iD399 INC $77 ; Pointer: Current Byte of BASIC Text
D39B BNE $D39F
D39D INC $78
D39F iD39F LDA $EA60
D3A2 CMP #$3A
D3A4 BCS $D3B0
D3A6 CMP #$20
D3A8 BEQ $D399 ; initat CHRGET For Zero-page
D3AA SEC
D3AB SBC #$30
D3AD SEC
D3AE SBC #$D0
D3B0 iD3B0 RTS
; rndsed RND Seed For zero-page DATA
;d3b1 0.811635157
D3B1 .byte 80 4F C7 52 58 ;.oGrx
; initcz Initialize BASIC RAM
D3B6 iD3B6 LDX #$FB
D3B8 TXS
D3B9 LDA #$4C
D3BB STA $51
D3BD STA $00 ; USR Function Jump Instr (4C)
D3BF LDA #$73
D3C1 LDY #$C3
D3C3 STA $01 ; USR Address [4: C373]
D3C5 STY $02
D3C7 LDX #$1C
D3C9 iD3C9 LDA $D398,X
D3CC STA $6F,X
D3CE DEX
D3CF BNE $D3C9
D3D1 LDA #$03
D3D3 STA $50
D3D5 TXA
D3D6 STA $65 ; Floating -accum. #1: Overflow Digit
D3D8 STA $10 ; 3: width of source (unused - from TTY)
D3DA STA $15
D3DC STA $0D ; 3: Flag to suppress PRINT or PRINT# when -ve
D3DE PHA
D3DF INX
D3E0 STX $01FD
D3E3 STX $01FC
D3E6 LDX #$16
D3E8 STX $13 ; Pointer Temporary String
D3EA LDY #$04
D3EC STA $28 ; Pointer: Start of BASIC Text [0401]
D3EE STY $29
D3F0 STA $11 ; Temp: Integer Value
D3F2 STY $12
D3F4 TAY
D3F5 LDA #$80
D3F7 BNE $D400
D3F9 LDA #$00
D3FB LDY #$B0
D3FD JMP $D41B
D400 iD400 INC $11 ; Temp: Integer Value
D402 BNE $D408
D404 INC $12
D406 BMI $D417 ; initms Output Power-Up Message
D408 iD408 LDA #$55
D40A STA ($11),Y ; Temp: Integer Value
D40C CMP ($11),Y ; Temp: Integer Value
D40E BNE $D417 ; initms Output Power-Up Message
D410 ASL
D411 STA ($11),Y ; Temp: Integer Value
D413 CMP ($11),Y ; Temp: Integer Value
D415 BEQ $D400
; initms Output Power-Up Message
D417 iD417 LDA $11 ; Temp: Integer Value
D419 LDY $12
D41B iD41B STA $34 ; Pointer: Highest Address Used by BASIC
D41D STY $35
D41F STA $30 ; Pointer: Bottom of String Storage
D421 STY $31
D423 LDY #$00
D425 TYA
D426 STA ($28),Y ; Pointer: Start of BASIC Text [0401]
D428 INC $28 ; Pointer: Start of BASIC Text [0401]
D42A LDA #$A4
D42C LDY #$DE
D42E JSR $BB1D ; strout Output String
D431 LDA $34 ; Pointer: Highest Address Used by BASIC
D433 SEC
D434 SBC $28 ; Pointer: Start of BASIC Text [0401]
D436 TAX
D437 LDA $35
D439 SBC $29
D43B JSR $CF83
D43E LDA #$4B
D440 LDY #$D4
D442 JSR $BB1D ; strout Output String
D445 JSR $B5D4
D448 JMP $B3FF ; ready Restart BASIC
; words Power-Up Message DATA
D44B .byte 20 42 59 54 45 53 20 46 ; bytes f
D453 .byte 52 45 45 0D 00 23 23 23 ;ree..###
D45B .byte 20 43 4F 4D 4D 4F 44 4F ; commodo
D463 .byte 52 45 20 42 41 53 49 43 ;re basic
D46B .byte 20 23 23 23 0D 0D 00 ; ###...
; Perform [monitor]
D472 iD472 LDA #$43
D474 STA $B5
D476 BNE $D491
; Break Entry
D478 JSR $F2A6 ; clrchn Restore Default I/O
D47B LDA #$42
D47D STA $B5
D47F CLD
D480 LSR
D481 PLA
D482 STA $0205
D485 PLA
D486 STA $0204
D489 PLA
D48A STA $0203
D48D PLA
D48E STA $0202
D491 iD491 PLA
D492 ADC #$FF
D494 STA $0201
D497 PLA
D498 ADC #$FF
D49A STA $0200 ; System INPUT Buffer
D49D LDA $90 ; Vector: Hardware Interrupt [3: E62E, 4: E455]
D49F STA $0208
D4A2 LDA $91
D4A4 STA $0207
D4A7 TSX
D4A8 STX $0206
D4AB CLI
D4AC JSR $D534 ; New Line
D4AF LDX $B5
D4B1 LDA #$2A
D4B3 JSR $D731 ; Output 2 Ascii Chars
D4B6 LDA #$52
D4B8 BNE $D4D4
; *Get Command
D4BA iD4BA LDA #$02
D4BC STA $77 ; Pointer: Current Byte of BASIC Text
D4BE LDA #$00
D4C0 STA $DE ; Cassette Read / Write Block Count
D4C2 LDX #$0D
D4C4 LDA #$2E
D4C6 JSR $D731 ; Output 2 Ascii Chars
D4C9 iD4C9 JSR $D798 ; ?
D4CC CMP #$2E
D4CE BEQ $D4C9
D4D0 CMP #$20
D4D2 BEQ $D4C9
D4D4 iD4D4 LDX #$07
D4D6 iD4D6 CMP $D544,X ; Commands DATA
D4D9 BNE $D4E6
D4DB STX $B4
D4DD LDA $D54C,X ; Command Vectors DATA
D4E0 PHA
D4E1 LDA $D554,X
D4E4 PHA
D4E5 RTS
D4E6 iD4E6 DEX
D4E7 BPL $D4D6
D4E9 JMP ($03FA) ; Monitor extension vector [D7A4]
D4EC iD4EC LDA $FB ; I/O Start Address
D4EE STA $0201
D4F1 LDA $FC
D4F3 STA $0200 ; System INPUT Buffer
D4F6 RTS
; Display Memory
D4F7 iD4F7 STA $B5
D4F9 LDY #$00
D4FB iD4FB JSR $D531 ; Print Space
D4FE LDA ($FB),Y ; I/O Start Address
D500 JSR $D722 ; Output 2-digit Byte
D503 JSR $D539 ; Increment Pointer
D506 DEC $B5
D508 BNE $D4FB
D50A RTS
; ?
D50B iD50B JSR $D763 ; Input Hex Byte
D50E BCC $D51D
D510 LDX #$00
D512 STA ($FB,X) ; I/O Start Address
D514 CMP ($FB,X) ; I/O Start Address
D516 BEQ $D51D
D518 PLA
D519 PLA
D51A JMP $D7A4 ; Print '?'
D51D iD51D JSR $D539 ; Increment Pointer
D520 DEC $B5
D522 RTS
; ?
D523 iD523 LDA #$02
D525 STA $FB ; I/O Start Address
D527 LDA #$02
D529 STA $FC
D52B LDA #$05
D52D RTS
D52E iD52E JSR $D531 ; Print Space
; Print Space
D531 iD531 LDA #$20
D533 BIT $0DA9
; *** Resyncing ***
; New Line
D534 iD534 LDA #$0D
D536 JMP $F266 ; chrout Output One Character
; Increment Pointer
D539 iD539 INC $FB ; I/O Start Address
D53B BNE $D543
D53D INC $FC
D53F BNE $D543
D541 INC $DE ; Cassette Read / Write Block Count
D543 iD543 RTS
; Commands DATA
D544 sD544 .byte 3A 3B 52 4D 47 58 4C 53 ;:;rmgxls
; Command Vectors DATA
D54C sD54C .byte D6 D5 D5 D5 D6 D6 D6 D6 ;VUUUVVVV
D554 sD554 .byte 1C FA 86 BB 32 6A 74 74 ;....2JTT
; '<cr> pc irq sr ac xr yr sp' DATA
D55C sD55C .byte 0D 20 20 20 20 20 50 43 ;. pc
D564 .byte 20 20 49 52 51 20 20 53 ; irq s
D56C .byte 52 20 41 43 20 58 52 20 ;r ac xr
D574 .byte 59 52 20 53 50 ;yr sp
; Do New Line
D579 iD579 TYA
D57A PHA
D57B JSR $D534 ; New Line
D57E PLA
D57F LDX #$2E
D581 JSR $D731 ; Output 2 Ascii Chars
D584 JMP $D52E
; Perform [r]
D587 LDX #$00
D589 iD589 LDA $D55C,X ; '<cr> pc irq sr ac xr yr sp' DATA
D58C JSR $F266 ; chrout Output One Character
D58F INX
D590 CPX #$1D
D592 BNE $D589
D594 LDY #$3B
D596 JSR $D579 ; Do New Line
D599 LDA $0200 ; System INPUT Buffer
D59C JSR $D722 ; Output 2-digit Byte
D59F LDA $0201
D5A2 JSR $D722 ; Output 2-digit Byte
D5A5 JSR $D531 ; Print Space
D5A8 LDA $0207
D5AB JSR $D722 ; Output 2-digit Byte
D5AE LDA $0208
D5B1 JSR $D722 ; Output 2-digit Byte
D5B4 JSR $D523 ; ?
D5B7 JSR $D4F7 ; Display Memory
D5BA BEQ $D5F5
; Perform [m]
D5BC JSR $D798 ; ?
D5BF JSR $D754 ; ?
D5C2 BCC $D5F8
D5C4 JSR $D744 ; Swap Add_ with Add_
D5C7 JSR $D798 ; ?
D5CA JSR $D754 ; ?
D5CD BCC $D5F8
D5CF JSR $D744 ; Swap Add_ with Add_
D5D2 iD5D2 JSR $F335 ; - -stop-
D5D5 BEQ $D5F5
D5D7 LDX $DE ; Cassette Read / Write Block Count
D5D9 BNE $D5F5
D5DB SEC
D5DC LDA $FD ; Tape Load Temps
D5DE SBC $FB ; I/O Start Address
D5E0 LDA $FE
D5E2 SBC $FC
D5E4 BCC $D5F5
D5E6 LDY #$3A
D5E8 JSR $D579 ; Do New Line
D5EB JSR $D717 ; Output 4-digit Address
D5EE LDA #$08
D5F0 JSR $D4F7 ; Display Memory
D5F3 BEQ $D5D2
D5F5 iD5F5 JMP $D4BA ; *Get Command
D5F8 iD5F8 JMP $D7A4 ; Print '?'
; Perform [;]
D5FB JSR $D763 ; Input Hex Byte
D5FE JSR $D754 ; ?
D601 BCC $D606
D603 JSR $D4EC
D606 iD606 JSR $F215 ; chrin Input a byte
D609 JSR $D754 ; ?
D60C BCC $D618
D60E LDA $FB ; I/O Start Address
D610 STA $0208
D613 LDA $FC
D615 STA $0207
D618 iD618 JSR $D523 ; ?
D61B BNE $D627
; Perform [:]
D61D JSR $D763 ; Input Hex Byte
D620 JSR $D754 ; ?
D623 BCC $D5F8
D625 LDA #$08
D627 iD627 STA $B5
D629 iD629 JSR $D798 ; ?
D62C JSR $D50B ; ?
D62F BNE $D629
D631 BEQ $D5F5
; Perform [g]
D633 JSR $F215 ; chrin Input a byte
D636 CMP #$0D
D638 BEQ $D646
D63A CMP #$20
D63C BNE $D5F8
D63E JSR $D754 ; ?
D641 BCC $D646
D643 JSR $D4EC
D646 iD646 LDX $0206
D649 TXS
D64A SEI
D64B LDA $0207
D64E STA $91
D650 LDA $0208
D653 STA $90 ; Vector: Hardware Interrupt [3: E62E, 4: E455]
D655 LDA $0200 ; System INPUT Buffer
D658 PHA
D659 LDA $0201
D65C PHA
D65D LDA $0202
D660 PHA
D661 LDA $0203
D664 LDX $0204
D667 LDY $0205
D66A RTI
; Perform [x]
D66B LDX $0206
D66E TXS
D66F JMP $B3FF ; ready Restart BASIC
D672 iD672 JMP $D7A4 ; Print '?'
; Perform [l/s]
D675 LDY #$01
D677 STY $D4 ; Current Device Number
D679 DEY
D67A STY $D1 ; Length of Current File Name
D67C STY $96 ; Kernal I/O Status Word: ST
D67E STY $9D ; Flag: 0 = Load, 1 = Verify (Kernel)
D680 LDA #$02
D682 STA $DB
D684 LDA #$09
D686 STA $DA ; Pointer: Current File Name
D688 iD688 JSR $F215 ; chrin Input a byte
D68B CMP #$20
D68D BEQ $D688
D68F CMP #$0D
D691 BEQ $D6AD
D693 CMP #$22
D695 iD695 BNE $D672
D697 iD697 JSR $F215 ; chrin Input a byte
D69A CMP #$22
D69C BEQ $D6C2
D69E CMP #$0D
D6A0 BEQ $D6AD
D6A2 STA ($DA),Y ; Pointer: Current File Name
D6A4 INC $D1 ; Length of Current File Name
D6A6 INY
D6A7 CPY #$10
D6A9 iD6A9 BEQ $D672
D6AB BNE $D697
D6AD iD6AD LDA $B4
D6AF CMP #$06
D6B1 iD6B1 BNE $D695
D6B3 JSR $F356
D6B6 JSR $F92B ; ?
D6B9 LDA $96 ; Kernal I/O Status Word: ST
D6BB AND #$10
D6BD iD6BD BNE $D6B1
D6BF JMP $D4BA ; *Get Command
D6C2 iD6C2 JSR $F215 ; chrin Input a byte
D6C5 CMP #$0D
D6C7 BEQ $D6AD
D6C9 CMP #$2C
D6CB iD6CB BNE $D6BD
D6CD JSR $D763 ; Input Hex Byte
D6D0 AND #$0F
D6D2 iD6D2 BEQ $D6A9
D6D4 CMP #$03
D6D6 BEQ $D6D2
D6D8 STA $D4 ; Current Device Number
D6DA JSR $F215 ; chrin Input a byte
D6DD CMP #$0D
D6DF BEQ $D6AD
D6E1 CMP #$2C
D6E3 iD6E3 BNE $D6CB
D6E5 JSR $D754 ; ?
D6E8 JSR $D744 ; Swap Add_ with Add_
D6EB JSR $F215 ; chrin Input a byte
D6EE CMP #$2C
D6F0 iD6F0 BNE $D6E3
D6F2 JSR $D754 ; ?
D6F5 LDA $FB ; I/O Start Address
D6F7 STA $C9 ; Tape End Addresses/End of Program
D6F9 LDA $FC
D6FB STA $CA
D6FD JSR $D744 ; Swap Add_ with Add_
D700 iD700 JSR $F215 ; chrin Input a byte
D703 CMP #$20
D705 BEQ $D700
D707 CMP #$0D
D709 iD709 BNE $D6F0
D70B LDA $B4
D70D CMP #$07
D70F BNE $D709
D711 JSR $F6E3
D714 JMP $D4BA ; *Get Command
; Output 4-digit Address
D717 iD717 LDX #$01
D719 LDA $FA,X ; Tape Motor Interlock #2
D71B PHA
D71C LDA $FB,X ; I/O Start Address
D71E JSR $D722 ; Output 2-digit Byte
D721 PLA
; Output 2-digit Byte
D722 iD722 PHA
D723 LSR
D724 LSR
D725 LSR
D726 LSR
D727 JSR $D73A ; Byte to 2 Ascii
D72A TAX
D72B PLA
D72C AND #$0F
D72E JSR $D73A ; Byte to 2 Ascii
; Output 2 Ascii Chars
D731 iD731 PHA
D732 TXA
D733 JSR $F266 ; chrout Output One Character
D736 PLA
D737 JMP $F266 ; chrout Output One Character
; Byte to 2 Ascii
D73A iD73A CLC
D73B ADC #$F6
D73D BCC $D741
D73F ADC #$06
D741 iD741 ADC #$3A
D743 RTS
; Swap Add_ with Add_
D744 iD744 LDX #$02
D746 iD746 LDA $FA,X ; Tape Motor Interlock #2
D748 PHA
D749 LDA $FC,X
D74B STA $FA,X ; Tape Motor Interlock #2
D74D PLA
D74E STA $FC,X
D750 DEX
D751 BNE $D746
D753 RTS
; ?
D754 iD754 JSR $D763 ; Input Hex Byte
D757 BCC $D75B
D759 STA $FC
D75B iD75B JSR $D763 ; Input Hex Byte
D75E BCC $D762
D760 STA $FB ; I/O Start Address
D762 iD762 RTS
; Input Hex Byte
D763 iD763 LDA #$00
D765 STA $0100 ; Micro-Processor System Stack Area
D768 JSR $D798 ; ?
D76B CMP #$20
D76D BNE $D778
D76F JSR $D798 ; ?
D772 CMP #$20
D774 BNE $D785
D776 CLC
D777 RTS
D778 iD778 JSR $D78D ; Evaluate Hex Digit
D77B ASL
D77C ASL
D77D ASL
D77E ASL
D77F STA $0100 ; Micro-Processor System Stack Area
D782 JSR $D798 ; ?
D785 iD785 JSR $D78D ; Evaluate Hex Digit
D788 ORA $0100 ; Micro-Processor System Stack Area
D78B SEC
D78C RTS
; Evaluate Hex Digit
D78D iD78D CMP #$3A
D78F PHP
D790 AND #$0F
D792 PLP
D793 BCC $D797
D795 ADC #$08
D797 iD797 RTS
; ?
D798 iD798 JSR $F215 ; chrin Input a byte
D79B CMP #$0D
D79D BNE $D797
D79F PLA
D7A0 PLA
D7A1 JMP $D4BA ; *Get Command
; Print '?'
;
; DOS
;
D7A4 iD7A4 LDA #$3F
D7A6 JSR $F266 ; chrout Output One Character
D7A9 JMP $D4BA ; *Get Command
D7AC iD7AC JMP $BF00 ; synerr Output ?SYNTAX Error
; Perform [record]
D7AF iD7AF LDA #$01
D7B1 STA $033A ; Tape I/O Buffer #2
D7B4 JSR $0076 ; Entry to Get Same Byte of Text Again
D7B7 LDA #$23
D7B9 JSR $BEF7 ; -Confirm Character in A
D7BC JSR $DE8A
D7BF CPX #$00
D7C1 BEQ $D801
D7C3 STX $D2 ; Current Logical File Number
D7C5 JSR $BEF5 ; -Test comma-
D7C8 BEQ $D7AC
D7CA BCC $D7DB
D7CC JSR $BEF2 ; -Test '('-
D7CF JSR $BD98 ; frmevl Evaluate Expression in Text
D7D2 JSR $C92D ; getadr Convert FAC#1 to Integer in LINNUM
D7D5 JSR $BEEF ; chkcls Confirm Character
D7D8 JMP $D7E1
D7DB iD7DB JSR $BD98 ; frmevl Evaluate Expression in Text
D7DE JSR $C92D ; getadr Convert FAC#1 to Integer in LINNUM
D7E1 iD7E1 JSR $0076 ; Entry to Get Same Byte of Text Again
D7E4 BEQ $D7FE
D7E6 JSR $BEF5 ; -Test comma-
D7E9 BEQ $D7AC
D7EB JSR $DE8A
D7EE CPX #$00
D7F0 BEQ $D801
D7F2 CPX #$FF
D7F4 BEQ $D801
D7F6 STX $033A ; Tape I/O Buffer #2
D7F9 JSR $0076 ; Entry to Get Same Byte of Text Again
D7FC BNE $D7AC
D7FE iD7FE JMP $DA31
D801 iD801 JMP $DE27
; ?
D804 iD804 AND #$E6
D806 BEQ $D80B
D808 iD808 JMP $BF00 ; synerr Output ?SYNTAX Error
D80B iD80B LDA $033E ; 4: DOS 8-bit syntax checking flag
D80E AND #$01
D810 CMP #$01
D812 BNE $D808
D814 LDA $033E ; 4: DOS 8-bit syntax checking flag
D817 RTS
D818 iD818 AND #$E7
D81A BNE $D808
D81C RTS
D81D iD81D AND #$C4
D81F BNE $D808
D821 LDA $033E ; 4: DOS 8-bit syntax checking flag
D824 iD824 AND #$03
D826 CMP #$03
D828 BNE $D808
D82A LDA $033E ; 4: DOS 8-bit syntax checking flag
D82D RTS
; ?
D82E iD82E AND #$05
D830 CMP #$05
D832 BNE $D808
D834 LDA $033E ; 4: DOS 8-bit syntax checking flag
D837 RTS
; DATA
D838 sD838 .byte FF 24 D1 D1 3A F1 2C E1 ;.$QQ:.,.
D840 .byte 2C E0 D1 3A F1 2C 41 4E ;,.Q:.,an
D848 .byte D1 3A F1 2C D0 56 D1 44 ;Q:.,PvQd
D850 .byte D2 3D D1 43 D2 3A F2 3D ;R=QcR:.=
D858 .byte D1 3A F1 43 D2 3A F2 3D ;Q:.cR:.=
D860 .byte D2 3A F2 2C D1 3A F1 52 ;R:.,Q:.r
D868 .byte D1 3A F2 3D D1 3A F1 53 ;Q:.=Q:.s
D870 .byte D1 3A F1 ;Q:.
; Perform [catalog/directory]
D873 iD873 LDA $D2 ; Current Logical File Number
D875 STA $B3 ; Temporary save eg. logical address or DOS wedge
D877 JSR $DC68 ; ?
D87A JSR $D818
D87D LDY #$00
D87F LDX #$01
D881 LDA $033E ; 4: DOS 8-bit syntax checking flag
D884 AND #$10
D886 BEQ $D889
D888 INX
D889 iD889 TXA
D88A JSR $DBFA ; ?
D88D LDA $B0 ; Default Output (CMD) Device (3)
D88F STA $BA
D891 LDA #$60
D893 STA $D3 ; Current Secondary Address
D895 LDA #$0E
D897 STA $D2 ; Current Logical File Number
D899 JSR $F1B9 ; untlk Send UNLISTEN
D89C JSR $F565
D89F LDA #$00
D8A1 STA $96 ; Kernal I/O Status Word: ST
D8A3 LDY #$03
D8A5 iD8A5 STY $D1 ; Length of Current File Name
D8A7 LDX #$0E
D8A9 JSR $F7AF ; chkin Set Input Device
D8AC JSR $F215 ; chrin Input a byte
D8AF STA $FD ; Tape Load Temps
D8B1 LDY $96 ; Kernal I/O Status Word: ST
D8B3 BNE $D912
D8B5 JSR $F215 ; chrin Input a byte
D8B8 STA $FE
D8BA LDY $96 ; Kernal I/O Status Word: ST
D8BC BNE $D912
D8BE LDY $D1 ; Length of Current File Name
D8C0 DEY
D8C1 BNE $D8A5
D8C3 JSR $F2A6 ; clrchn Restore Default I/O
D8C6 JSR $D923
D8C9 LDX $FD ; Tape Load Temps
D8CB LDA $FE
D8CD JSR $CF83
D8D0 LDA #$20
D8D2 JSR $F266 ; chrout Output One Character
D8D5 JSR $F2A6 ; clrchn Restore Default I/O
D8D8 iD8D8 LDX #$0E
D8DA JSR $F7AF ; chkin Set Input Device
D8DD JSR $F215 ; chrin Input a byte
D8E0 PHA
D8E1 JSR $F2A6 ; clrchn Restore Default I/O
D8E4 PLA
D8E5 LDX $96 ; Kernal I/O Status Word: ST
D8E7 BNE $D912
D8E9 CMP #$00
D8EB BEQ $D905
D8ED JSR $D91A
D8F0 JSR $F335 ; - -stop-
D8F3 BEQ $D912
D8F5 JSR $F205 ; - Input From Screen or Keyboard
D8F8 BEQ $D8D8
D8FA CMP #$20
D8FC BNE $D8D8
D8FE iD8FE JSR $F205 ; - Input From Screen or Keyboard
D901 BEQ $D8FE
D903 BNE $D8D8
D905 iD905 LDA #$0D
D907 JSR $D91A
D90A JSR $F1B9 ; untlk Send UNLISTEN
D90D LDY #$02
D90F BNE $D8A5
D911 PLA
D912 iD912 JSR $F2A6 ; clrchn Restore Default I/O
D915 LDA #$0E
D917 JMP $F2E2
D91A iD91A JSR $D923
D91D JSR $F266 ; chrout Output One Character
D920 JMP $F2A6 ; clrchn Restore Default I/O
D923 iD923 LDX $BA
D925 CPX #$03
D927 BEQ $D92E
D929 LDX $B3 ; Temporary save eg. logical address or DOS wedge
D92B JSR $F7FE ; chkout Set Output Device
D92E iD92E RTS
D92F iD92F LDY #$61
D931 iD931 INY
D932 TYA
D933 LDX $AE ; No. of Open Files / Index to File Table
D935 iD935 DEX
D936 BMI $D93F
D938 CMP $0265,X ; KERNAL Table: Second Address Each File
D93B BEQ $D931
D93D BNE $D935
D93F iD93F STY $D3 ; Current Secondary Address
D941 RTS
; Perform [dopen]
D942 iD942 JSR $DC68 ; ?
D945 JSR $D82E ; ?
D948 AND #$22
D94A BEQ $D94F
D94C JMP $BF00 ; synerr Output ?SYNTAX Error
D94F iD94F JSR $D92F
D952 LDY #$02
D954 LDX #$03
D956 BIT $033E
D959 BVC $D95D
D95B LDX #$07
D95D iD95D BIT $033E
D960 BPL $D970
D962 LDA #$40
D964 STA $0353 ; 4: Full DOS command string buffer
D967 TXA
D968 LDX #$01
D96A JSR $DBFC
D96D JMP $F563
D970 iD970 TXA
D971 JSR $DBFA ; ?
D974 JMP $F563
; Perform [append]
D977 iD977 JSR $DC68 ; ?
D97A JSR $D82E ; ?
D97D AND #$E2
D97F BEQ $D984
D981 JMP $BF00 ; synerr Output ?SYNTAX Error
D984 iD984 JSR $D92F
D987 LDY #$09
D989 LDA #$05
D98B JSR $DBFA ; ?
D98E JMP $F563
D991 iD991 LDA $0D ; 3: Flag to suppress PRINT or PRINT# when -ve
D993 BNE $D9AB
; ?
D995 iD995 LDA #$28
D997 STA $0D ; 3: Flag to suppress PRINT or PRINT# when -ve
D999 JSR $C61D ; getspa Allocate Space for String
D99C STX $0E ; 3: File# of current I/O device (as 0010)
D99E STY $0F ; 3: terminal width (unused-carried over from TTY)
D9A0 LDA #$00
D9A2 LDY #$29
D9A4 JSR $DE9E
D9A7 LDA #$0D
D9A9 STA ($0E),Y ; 3: File# of current I/O device (as 0010)
D9AB iD9AB LDA $D4 ; Current Device Number
D9AD BNE $D9B3
D9AF LDA #$08
D9B1 STA $D4 ; Current Device Number
D9B3 iD9B3 JSR $F0D2 ; talk Send TALK Command on IEEE Bus
D9B6 LDA #$6F
D9B8 STA $D3 ; Current Secondary Address
D9BA JSR $F193
D9BD LDY #$FF
D9BF iD9BF INY
D9C0 JSR $F1C0
D9C3 CMP #$0D
D9C5 BEQ $D9CB
D9C7 STA ($0E),Y ; 3: File# of current I/O device (as 0010)
D9C9 BNE $D9BF
D9CB iD9CB LDA #$00
D9CD STA ($0E),Y ; 3: File# of current I/O device (as 0010)
D9CF JMP $F1AE ; untlk Send UNTALK
; Perform [header]
D9D2 iD9D2 JSR $DC68 ; ?
D9D5 JSR $D804 ; ?
D9D8 AND #$11
D9DA CMP #$11
D9DC BEQ $D9E1
D9DE JMP $BF00 ; synerr Output ?SYNTAX Error
D9E1 iD9E1 JSR $DA1B
D9E4 JSR $DB9E ; ?
D9E7 BCC $D9EA
D9E9 RTS
D9EA iD9EA LDY #$0E
D9EC LDA #$04
D9EE LDX $033F ; 4: DOS diskette ID
D9F1 BEQ $D9F5
D9F3 LDA #$06
D9F5 iD9F5 JSR $DA98
D9F8 JSR $D991
D9FB LDY #$00
D9FD LDA ($0E),Y ; 3: File# of current I/O device (as 0010)
D9FF CMP #$32
DA01 BCS $DA04
DA03 RTS
DA04 iDA04 JMP $DBD7 ; Confirm Disk Valid
; Perform [dclose]
DA07 iDA07 JSR $DC68 ; ?
DA0A AND #$F3
DA0C BEQ $DA11
DA0E JMP $BF00 ; synerr Output ?SYNTAX Error
DA11 iDA11 JSR $DBE1 ; ?
DA14 LDA $D2 ; Current Logical File Number
DA16 BEQ $DA1B
DA18 JMP $F2E2
DA1B iDA1B LDA $D4 ; Current Device Number
DA1D LDX $AE ; No. of Open Files / Index to File Table
DA1F iDA1F DEX
DA20 BMI $DA30
DA22 CMP $025B,X ; KERNAL Table: Device No. for Each File
DA25 BNE $DA1F
DA27 LDA $0251,X ; KERNAL Table: Active Logical File No's.
DA2A JSR $F2E7
DA2D CLV
DA2E BVC $DA1B
DA30 iDA30 RTS
DA31 iDA31 LDA $D2 ; Current Logical File Number
DA33 JSR $F2C1
DA36 BEQ $DA3D
DA38 LDY #$17
DA3A JMP $F5AF
DA3D iDA3D JSR $F2CD
DA40 JSR $DBE1 ; ?
DA43 LDA #$50
DA45 STA $0353 ; 4: Full DOS command string buffer
DA48 LDA $D3 ; Current Secondary Address
DA4A STA $0354
DA4D LDA $11 ; Temp: Integer Value
DA4F STA $0355
DA52 LDA $12
DA54 STA $0356
DA57 LDA $033A ; Tape I/O Buffer #2
DA5A STA $0357
DA5D LDX #$05
DA5F JSR $DC4C
DA62 JMP $DA9B
; Perform [collect]
DA65 iDA65 JSR $DC68 ; ?
DA68 JSR $D818
DA6B JSR $DA1B
DA6E LDY #$14
DA70 LDX #$01
DA72 LDA $033E ; 4: DOS 8-bit syntax checking flag
DA75 AND #$10
DA77 BEQ $DA7A
DA79 INX
DA7A iDA7A TXA
DA7B JMP $DA98
; Perform [backup]
DA7E iDA7E JSR $DC68 ; ?
DA81 AND #$30
DA83 CMP #$30
DA85 BEQ $DA8A
DA87 iDA87 JMP $BF00 ; synerr Output ?SYNTAX Error
DA8A iDA8A LDA $033E ; 4: DOS 8-bit syntax checking flag
DA8D AND #$C7
DA8F BNE $DA87
DA91 JSR $DA1B
DA94 LDY #$16
DA96 LDA #$04
DA98 iDA98 JSR $DBFA ; ?
DA9B iDA9B LDA #$6F
DA9D STA $D3 ; Current Secondary Address
DA9F JSR $F0D5 ; listn Send LISTEN Command on IEEE Bus
DAA2 LDA $D3 ; Current Secondary Address
DAA4 JMP $F4B4
; Perform [copy]
DAA7 iDAA7 JSR $DC68 ; ?
DAAA AND #$30
DAAC CMP #$30
DAAE BNE $DAB7
DAB0 LDA $033E ; 4: DOS 8-bit syntax checking flag
DAB3 AND #$C7
DAB5 BEQ $DAC0
DAB7 iDAB7 LDA $033E ; 4: DOS 8-bit syntax checking flag
DABA JSR $D81D
DABD LDA $033E ; 4: DOS 8-bit syntax checking flag
DAC0 iDAC0 LDY #$1A
DAC2 LDA #$08
DAC4 JMP $DA98
; Perform [concat]
DAC7 iDAC7 JSR $DC68 ; ?
DACA JSR $D81D
DACD LDY #$22
DACF LDA #$0C
DAD1 JMP $DA98
DAD4 iDAD4 LDA $D1 ; Length of Current File Name
DAD6 STA $033A ; Tape I/O Buffer #2
DAD9 LDA $DA ; Pointer: Current File Name
DADB STA $FD ; Tape Load Temps
DADD LDA $DB
DADF STA $FE
DAE1 iDAE1 TYA
DAE2 PHA
DAE3 LDY $033A ; Tape I/O Buffer #2
DAE6 BEQ $DAF8
DAE8 LDY #$00
DAEA iDAEA LDA ($FD),Y ; Tape Load Temps
DAEC STA $0353,X ; 4: Full DOS command string buffer
DAEF INX
DAF0 INY
DAF1 CPY $033A ; Tape I/O Buffer #2
DAF4 BNE $DAEA
DAF6 BEQ $DAF9
DAF8 iDAF8 DEX
DAF9 iDAF9 PLA
DAFA TAY
DAFB SEC
DAFC RTS
DAFD iDAFD LDA $033F ; 4: DOS diskette ID
DB00 STA $0353,X ; 4: Full DOS command string buffer
DB03 INX
DB04 LDA $0340
DB07 STA $0353,X ; 4: Full DOS command string buffer
DB0A INX
DB0B TXA
DB0C RTS
; Perform [dsave]
DB0D iDB0D JSR $DC68 ; ?
DB10 JSR $D80B
DB13 AND #$66
DB15 BEQ $DB1A
DB17 JMP $BF00 ; synerr Output ?SYNTAX Error
DB1A iDB1A LDY #$02
DB1C LDA $033E ; 4: DOS 8-bit syntax checking flag
DB1F AND #$80
DB21 BEQ $DB32
DB23 LDA #$40
DB25 STA $0353 ; 4: Full DOS command string buffer
DB28 LDX #$01
DB2A LDA #$03
DB2C JSR $DBFC
DB2F JMP $F6E0
DB32 iDB32 LDA #$03
DB34 JSR $DBFA ; ?
DB37 JMP $F6E0
; Perform [dload]
DB3A iDB3A JSR $DC68 ; ?
DB3D JSR $D80B
DB40 AND #$E6
DB42 BEQ $DB47
DB44 iDB44 JMP $BF00 ; synerr Output ?SYNTAX Error
DB47 iDB47 LDY #$02
DB49 LDA #$03
DB4B JSR $DBFA ; ?
DB4E LDA #$00
DB50 STA $9D ; Flag: 0 = Load, 1 = Verify (Kernel)
DB52 JMP $F408
; Perform [rename]
DB55 iDB55 JSR $DC68 ; ?
DB58 JSR $D824
DB5B AND #$E4
DB5D BNE $DB44
DB5F LDY #$2E
DB61 LDA #$08
DB63 JMP $DA98
; Perform [scratch]
DB66 iDB66 JSR $DC68 ; ?
DB69 JSR $D804 ; ?
DB6C JSR $DB9E ; ?
DB6F BCS $DB98
DB71 LDY #$36
DB73 LDA #$04
DB75 JSR $DA98
DB78 JSR $DB99 ; Check Disk Valid
DB7B BNE $DB98
DB7D JSR $D991
DB80 LDA #$0D
DB82 JSR $E202 ; - Output to Screen
DB85 LDY #$00
DB87 iDB87 LDA ($0E),Y ; 3: File# of current I/O device (as 0010)
DB89 CMP #$00
DB8B BEQ $DB93
DB8D JSR $E202 ; - Output to Screen
DB90 INY
DB91 BNE $DB87
DB93 iDB93 LDA #$0D
DB95 JSR $E202 ; - Output to Screen
DB98 iDB98 RTS
; Check Disk Valid
DB99 iDB99 LDA $78
DB9B CMP #$02
DB9D RTS
; ?
DB9E iDB9E JSR $DB99 ; Check Disk Valid
DBA1 BNE $DBD5
DBA3 LDY #$B6
DBA5 JSR $F185 ; - Print Message
DBA8 JSR $F2A6 ; clrchn Restore Default I/O
DBAB JSR $F215 ; chrin Input a byte
DBAE CMP #$59
DBB0 BNE $DBCB
DBB2 JSR $F215 ; chrin Input a byte
DBB5 CMP #$0D
DBB7 BEQ $DBD5
DBB9 CMP #$45
DBBB BNE $DBCB
DBBD JSR $F215 ; chrin Input a byte
DBC0 CMP #$53
DBC2 BNE $DBCB
DBC4 JSR $F215 ; chrin Input a byte
DBC7 CMP #$0D
DBC9 BEQ $DBD5
DBCB iDBCB CMP #$0D
DBCD SEC
DBCE BEQ $DBD6
DBD0 JSR $F215 ; chrin Input a byte
DBD3 BNE $DBCB
DBD5 iDBD5 CLC
DBD6 iDBD6 RTS
; Confirm Disk Valid
DBD7 iDBD7 JSR $DB99 ; Check Disk Valid
DBDA BNE $DBD6
DBDC LDY #$C5
DBDE JMP $F185 ; - Print Message
; ?
DBE1 iDBE1 TYA
DBE2 PHA
DBE3 LDA $0D ; 3: Flag to suppress PRINT or PRINT# when -ve
DBE5 BEQ $DBF1
DBE7 LDY #$28
DBE9 TYA
DBEA STA ($0E),Y ; 3: File# of current I/O device (as 0010)
DBEC INY
DBED LDA #$FF
DBEF STA ($0E),Y ; 3: File# of current I/O device (as 0010)
DBF1 iDBF1 LDA #$00
DBF3 STA $96 ; Kernal I/O Status Word: ST
DBF5 STA $0D ; 3: Flag to suppress PRINT or PRINT# when -ve
DBF7 PLA
DBF8 TAY
DBF9 RTS
; ?
DBFA iDBFA LDX #$00
DBFC iDBFC STA $0341 ; 4: Length of DOS command string
DBFF JSR $DBE1 ; ?
DC02 iDC02 DEC $0341 ; 4: Length of DOS command string
DC05 BMI $DC4C
DC07 INY
DC08 LDA $D838,Y ; DATA
DC0B BPL $DC46
DC0D CMP #$F1
DC0F BNE $DC14
DC11 JSR $DAD4
DC14 iDC14 CMP #$F2
DC16 BNE $DC1B
DC18 JSR $DAE1
DC1B iDC1B CMP #$E0
DC1D BNE $DC24
DC1F LDA $033D ; 4: DOS length / write flag
DC22 BNE $DC46
DC24 iDC24 CMP #$D0
DC26 BNE $DC2B
DC28 JSR $DAFD
DC2B iDC2B CMP #$E1
DC2D BNE $DC34
DC2F JSR $DC57
DC32 BNE $DC46
DC34 iDC34 CMP #$D1
DC36 BNE $DC3D
DC38 LDA $033B ; 4: DOS drive 1 number
DC3B BPL $DC44
DC3D iDC3D CMP #$D2
DC3F BNE $DC02
DC41 LDA $033C ; 4: DOS drive 2 number
DC44 iDC44 ORA #$30
DC46 iDC46 STA $0353,X ; 4: Full DOS command string buffer
DC49 INX
DC4A BNE $DC02
DC4C iDC4C STX $D1 ; Length of Current File Name
DC4E LDA #$53
DC50 STA $DA ; Pointer: Current File Name
DC52 LDA #$03
DC54 STA $DB
DC56 RTS
DC57 iDC57 LDA $033D ; 4: DOS length / write flag
DC5A BEQ $DC60
DC5C LDA #$4C
DC5E BNE $DC67
DC60 iDC60 LDA #$53
DC62 STA $033D ; 4: DOS length / write flag
DC65 LDA #$57
DC67 iDC67 RTS
; ?
DC68 iDC68 LDX #$00
DC6A STX $033E ; 4: DOS 8-bit syntax checking flag
DC6D STX $D2 ; Current Logical File Number
DC6F STX $033D ; 4: DOS length / write flag
DC72 STX $033B ; 4: DOS drive 1 number
DC75 STX $033C ; 4: DOS drive 2 number
DC78 STX $D1 ; Length of Current File Name
DC7A STX $033A ; Tape I/O Buffer #2
DC7D STX $033F ; 4: DOS diskette ID
DC80 LDX #$08
DC82 STX $D4 ; Current Device Number
DC84 JSR $0076 ; Entry to Get Same Byte of Text Again
DC87 BEQ $DD03
DC89 iDC89 CMP #$23
DC8B BEQ $DCBD
DC8D CMP #$57
DC8F BEQ $DCD8
DC91 CMP #$4C
DC93 BEQ $DCD8
DC95 CMP #$52
DC97 BNE $DC9F
DC99 JSR $0070 ; Subroutine: Get Next Byte of BASIC Text
DC9C JMP $DD96
DC9F iDC9F CMP #$44
DCA1 BEQ $DD15
DCA3 CMP #$91
DCA5 BEQ $DD09
DCA7 CMP #$55
DCA9 BEQ $DD0F
DCAB CMP #$49
DCAD BNE $DCB2
DCAF JMP $DD37
DCB2 iDCB2 CMP #$22
DCB4 BEQ $DD06
DCB6 CMP #$28
DCB8 BEQ $DD06
DCBA iDCBA JMP $BF00 ; synerr Output ?SYNTAX Error
DCBD iDCBD LDA $033E ; 4: DOS 8-bit syntax checking flag
DCC0 AND #$04
DCC2 BNE $DCBA
DCC4 JSR $DE87 ; ?
DCC7 CPX #$00
DCC9 BEQ $DD34
DCCB STX $D2 ; Current Logical File Number
DCCD LDA $033E ; 4: DOS 8-bit syntax checking flag
DCD0 ORA #$04
DCD2 STA $033E ; 4: DOS 8-bit syntax checking flag
DCD5 JMP $DD96
DCD8 iDCD8 TAX
DCD9 LDA $033E ; 4: DOS 8-bit syntax checking flag
DCDC AND #$40
DCDE BNE $DCBA
DCE0 CPX #$57
DCE2 BNE $DCEA
DCE4 JSR $0070 ; Subroutine: Get Next Byte of BASIC Text
DCE7 JMP $DCF8
DCEA iDCEA JSR $DE87 ; ?
DCED CPX #$00
DCEF BEQ $DD34
DCF1 CPX #$FF
DCF3 BEQ $DD34
DCF5 STX $033D ; 4: DOS length / write flag
DCF8 iDCF8 LDA $033E ; 4: DOS 8-bit syntax checking flag
DCFB ORA #$40
DCFD STA $033E ; 4: DOS 8-bit syntax checking flag
DD00 JMP $DD96
DD03 iDD03 JMP $DE23
DD06 iDD06 JMP $DD60
DD09 iDD09 JSR $DE2C
DD0C JMP $DD96
DD0F iDD0F JSR $DE33
DD12 JMP $DD96
DD15 iDD15 LDA $033E ; 4: DOS 8-bit syntax checking flag
DD18 AND #$10
DD1A BNE $DCBA
DD1C JSR $DE87 ; ?
DD1F CPX #$02
DD21 BCS $DD34
DD23 STX $033B ; 4: DOS drive 1 number
DD26 STX $033C ; 4: DOS drive 2 number
DD29 LDA $033E ; 4: DOS 8-bit syntax checking flag
DD2C ORA #$10
DD2E STA $033E ; 4: DOS 8-bit syntax checking flag
DD31 JMP $DD96
DD34 iDD34 JMP $DE27
DD37 iDD37 LDA $033D ; 4: DOS length / write flag
DD3A AND #$FF
DD3C BEQ $DD41
DD3E JMP $BF00 ; synerr Output ?SYNTAX Error
DD41 iDD41 LDY #$00
DD43 LDX #$00
DD45 iDD45 INC $77 ; Pointer: Current Byte of BASIC Text
DD47 BNE $DD4B
DD49 INC $78
DD4B iDD4B LDA ($77),Y ; Pointer: Current Byte of BASIC Text
DD4D STA $033F,X ; 4: DOS diskette ID
DD50 INX
DD51 CPX #$02
DD53 BCC $DD45
DD55 LDA #$FF
DD57 STA $033D ; 4: DOS length / write flag
DD5A JSR $0070 ; Subroutine: Get Next Byte of BASIC Text
DD5D JMP $DD96
DD60 iDD60 LDA $033E ; 4: DOS 8-bit syntax checking flag
DD63 AND #$01
DD65 JSR $DE49
DD68 STA $D1 ; Length of Current File Name
DD6A STA $0341 ; 4: Length of DOS command string
DD6D LDA #$42
DD6F STA $DA ; Pointer: Current File Name
DD71 LDA #$03
DD73 STA $DB
DD75 LDY #$00
DD77 iDD77 LDA ($1F),Y ; Utility Pointer Area
DD79 CPY #$00
DD7B BNE $DD85
DD7D CMP #$40
DD7F BNE $DD85
DD81 INC $DA ; Pointer: Current File Name
DD83 DEC $D1 ; Length of Current File Name
DD85 iDD85 STA $0342,Y ; 4: Buffer for filename
DD88 INY
DD89 CPY $0341 ; 4: Length of DOS command string
DD8C BCC $DD77
DD8E LDA $033E ; 4: DOS 8-bit syntax checking flag
DD91 ORA #$01
DD93 STA $033E ; 4: DOS 8-bit syntax checking flag
DD96 iDD96 JSR $0076 ; Entry to Get Same Byte of Text Again
DD99 BNE $DD9E
DD9B JMP $DD03
DD9E iDD9E CMP #$2C
DDA0 BNE $DDA8
DDA2 JSR $0070 ; Subroutine: Get Next Byte of BASIC Text
DDA5 JMP $DC89
DDA8 iDDA8 CMP #$91
DDAA BNE $DDAF
DDAC JMP $DD09
DDAF iDDAF CMP #$A4
DDB1 BEQ $DDB6
DDB3 JMP $BF00 ; synerr Output ?SYNTAX Error
DDB6 iDDB6 JSR $0070 ; Subroutine: Get Next Byte of BASIC Text
DDB9 CMP #$44
DDBB BEQ $DDD0
DDBD CMP #$91
DDBF BEQ $DDEC
DDC1 CMP #$55
DDC3 BEQ $DDF2
DDC5 CMP #$22
DDC7 BEQ $DDF8
DDC9 CMP #$28
DDCB BEQ $DDF8
DDCD iDDCD JMP $BF00 ; synerr Output ?SYNTAX Error
DDD0 iDDD0 LDA $033E ; 4: DOS 8-bit syntax checking flag
DDD3 AND #$20
DDD5 BNE $DDCD
DDD7 JSR $DE87 ; ?
DDDA CPX #$02
DDDC BCS $DE27
DDDE STX $033C ; 4: DOS drive 2 number
DDE1 LDA $033E ; 4: DOS 8-bit syntax checking flag
DDE4 ORA #$20
DDE6 STA $033E ; 4: DOS 8-bit syntax checking flag
DDE9 JMP $DE0F
DDEC iDDEC JSR $DE2C
DDEF JMP $DE0F
DDF2 iDDF2 JSR $DE33
DDF5 JMP $DE0F
DDF8 iDDF8 LDA $033E ; 4: DOS 8-bit syntax checking flag
DDFB AND #$02
DDFD JSR $DE49
DE00 STA $033A ; Tape I/O Buffer #2
DE03 STX $FD ; Tape Load Temps
DE05 STY $FE
DE07 LDA $033E ; 4: DOS 8-bit syntax checking flag
DE0A ORA #$02
DE0C STA $033E ; 4: DOS 8-bit syntax checking flag
DE0F iDE0F JSR $0076 ; Entry to Get Same Byte of Text Again
DE12 BEQ $DE23
DE14 CMP #$2C
DE16 BEQ $DDB6
DE18 CMP #$91
DE1A BEQ $DDEC
DE1C CMP #$55
DE1E BEQ $DDF2
DE20 iDE20 JMP $BF00 ; synerr Output ?SYNTAX Error
DE23 iDE23 LDA $033E ; 4: DOS 8-bit syntax checking flag
DE26 RTS
DE27 iDE27 LDX #$35
DE29 JMP $B3CF ; error Error Routine
DE2C iDE2C JSR $0070 ; Subroutine: Get Next Byte of BASIC Text
DE2F CMP #$55
DE31 BNE $DE20
DE33 iDE33 JSR $DE87 ; ?
DE36 CPX #$20
DE38 BCS $DE27
DE3A CPX #$03
DE3C BCC $DE27
DE3E STX $D4 ; Current Device Number
DE40 LDA $033E ; 4: DOS 8-bit syntax checking flag
DE43 ORA #$08
DE45 STA $033E ; 4: DOS 8-bit syntax checking flag
DE48 RTS
DE49 iDE49 BNE $DE20
DE4B JSR $BD98 ; frmevl Evaluate Expression in Text
DE4E JSR $C7B5 ; frestr Perform String Housekeeping
DE51 TAX
DE52 CMP #$00
DE54 BEQ $DE27
DE56 CMP #$12
DE58 BCS $DE74
DE5A LDY #$00
DE5C LDA ($1F),Y ; Utility Pointer Area
DE5E CMP #$40
DE60 BNE $DE6C
DE62 LDA $033E ; 4: DOS 8-bit syntax checking flag
DE65 AND #$80
DE67 BEQ $DE79
DE69 JMP $BF00 ; synerr Output ?SYNTAX Error
DE6C iDE6C TXA
DE6D CMP #$11
DE6F BCS $DE74
DE71 JMP $DE82
DE74 iDE74 LDX #$B0
DE76 JMP $B3CF ; error Error Routine
DE79 iDE79 LDA $033E ; 4: DOS 8-bit syntax checking flag
DE7C ORA #$80
DE7E STA $033E ; 4: DOS 8-bit syntax checking flag
DE81 TXA
DE82 iDE82 LDX $1F ; Utility Pointer Area
DE84 LDY $20
DE86 RTS
; ?
DE87 iDE87 JSR $0070 ; Subroutine: Get Next Byte of BASIC Text
DE8A iDE8A BNE $DE8F
DE8C JMP $BF00 ; synerr Output ?SYNTAX Error
DE8F iDE8F BCC $DE9A
DE91 JSR $BEF2 ; -Test '('-
DE94 JSR $C8D4 ; -Eval Byte Parameter
DE97 JMP $BEEF ; chkcls Confirm Character
DE9A iDE9A JMP $C8D4 ; -Eval Byte Parameter
; ? DATA
DE9D .byte F4 ;.
DE9E iDE9E STA $96 ; Kernal I/O Status Word: ST
DEA0 STA ($0E),Y ; 3: File# of current I/O device (as 0010)
DEA2 DEY
DEA3 RTS
; Patched Power-Up Message DATA
DEA4 .byte 2A 2A 2A 20 43 4F 4D 4D ;*** comm
DEAC .byte 4F 44 4F 52 45 20 42 41 ;odore ba
DEB4 .byte 53 49 43 20 34 2E 30 20 ;sic 4.0
DEBC .byte 2A 2A 2A 0D 0D 00 ;***...
; Unused EMPTY
;
; Editor (E000-E7FF)
;
DEC2 .byte AA AA AA AA AA AA AA AA ;........
DECA .byte AA AA AA AA AA AA AA AA ;........
DED2 .byte AA AA AA AA AA AA AA AA ;........
DEDA .byte AA AA AA AA AA AA AA AA ;........
DEE2 .byte AA AA AA AA AA AA AA AA ;........
DEEA .byte AA AA AA AA AA AA AA AA ;........
DEF2 .byte AA AA AA AA AA AA AA AA ;........
DEFA .byte AA AA AA AA AA AA AA AA ;........
DF02 .byte AA AA AA AA AA AA AA AA ;........
DF0A .byte AA AA AA AA AA AA AA AA ;........
DF12 .byte AA AA AA AA AA AA AA AA ;........
DF1A .byte AA AA AA AA AA AA AA AA ;........
DF22 .byte AA AA AA AA AA AA AA AA ;........
DF2A .byte AA AA AA AA AA AA AA AA ;........
DF32 .byte AA AA AA AA AA AA AA AA ;........
DF3A .byte AA AA AA AA AA AA AA AA ;........
DF42 .byte AA AA AA AA AA AA AA AA ;........
DF4A .byte AA AA AA AA AA AA AA AA ;........
DF52 .byte AA AA AA AA AA AA AA AA ;........
DF5A .byte AA AA AA AA AA AA AA AA ;........
DF62 .byte AA AA AA AA AA AA AA AA ;........
DF6A .byte AA AA AA AA AA AA AA AA ;........
DF72 .byte AA AA AA AA AA AA AA AA ;........
DF7A .byte AA AA AA AA AA AA AA AA ;........
DF82 .byte AA AA AA AA AA AA AA AA ;........
DF8A .byte AA AA AA AA AA AA AA AA ;........
DF92 .byte AA AA AA AA AA AA AA AA ;........
DF9A .byte AA AA AA AA AA AA AA AA ;........
DFA2 .byte AA AA AA AA AA AA AA AA ;........
DFAA .byte AA AA AA AA AA AA AA AA ;........
DFB2 .byte AA AA AA AA AA AA AA AA ;........
DFBA .byte AA AA AA AA AA AA AA AA ;........
DFC2 .byte AA AA AA AA AA AA AA AA ;........
DFCA .byte AA AA AA AA AA AA AA AA ;........
DFD2 .byte AA AA AA AA AA AA AA AA ;........
DFDA .byte AA AA AA AA AA AA AA AA ;........
DFE2 .byte AA AA AA AA AA AA AA AA ;........
DFEA .byte AA AA AA AA AA AA AA AA ;........
DFF2 .byte AA AA AA AA AA AA AA AA ;........
DFFA .byte AA AA AA AA AA AA ;......
; cint Initialize Editor & Screen
E000 iE000 JMP $E04B ; ?
E003 JMP $E0A7 ; lp2 Get Character From Keyboard Buffer
E006 JMP $E116 ; Input From Screen or Keyboard
E009 JMP $E202 ; - Output to Screen
E00C JMP $E442 ; - Main IRQ Entry Point
E00F JMP $E455 ; ?
E012 JMP $E600 ; - Return From Interrupt
E015 JMP $E051 ; - Clear Screen
E018 JMP $E07A ; Initialize CRTC --
E01B JMP $E082 ; Initialize CRTC --
; Initialize CRTC (with custom values)
E01E JMP $E088
E021 JMP $E3C8 ; ?
E024 JMP $E3E8 ; - Scroll Screen
E027 JMP $E4BE ; scnkey Scan Keyboard
E02A JMP $E6A7 ; ?
E02D JMP $E036 ; Set REPEAT Flag
E030 JMP $E1E1 ; Set Window Top
E033 JMP $E1DC ; Set Window Bottom
; Set REPEAT Flag
E036 iE036 STA $E4 ; 4.80: Flag: REPEAT Key Used, $80 = Repeat, $40 = disable
E038 RTS
E039 TAX
E03A TAX
E03B TAX
E03C TAX
E03D TAX
E03E TAX
E03F TAX
E040 TAX
E041 TAX
E042 TAX
E043 TAX
E044 TAX
E045 TAX
E046 TAX
E047 TAX
E048 TAX
E049 TAX
E04A TAX
; ?
E04B iE04B JSR $E60F ; cint1 Initialize I/O
E04E JSR $E07A ; Initialize CRTC --
; - Clear Screen
E051 iE051 LDX $E0 ; 3+4.40: Screen Line Link Table / Editor Temps
E053 DEX
E054 iE054 INX
E055 JSR $E06C
E058 JSR $E1C1 ; - Clear Screen Line
E05B CPX $E1 ; 4.80: last line of window
E05D BCC $E054
E05F iE05F LDX $E0 ; 3+4.40: Screen Line Link Table / Editor Temps
E061 STX $D8 ; Current Cursor Physical Line Number
E063 iE063 LDY $E2 ; 4.80: first column of window
E065 STY $C6 ; Cursor Column on Current Line
; - Set Screen Pointers
E067 iE067 LDX $D8 ; Current Cursor Physical Line Number
E069 JMP $E06F
E06C iE06C LDY $E2 ; 4.80: first column of window
E06E DEY
E06F iE06F LDA $E755,X ; - Screen Line Addresses LO DATA
E072 STA $C4 ; Pointer: Current Screen Line Address
E074 LDA $E76E,X ; - Screen Line Addresses HI DATA
E077 STA $C5
E079 RTS
; Initialize CRTC --
E07A iE07A LDA #$2A
E07C LDX #$E7
E07E LDY #$0E
E080 BNE $E088
; Initialize CRTC --
E082 iE082 LDA #$3C
E084 LDX #$E7
E086 LDY #$0C
E088 iE088 STA $C7 ; Pointer: Tape Buffer/ Screen Scrolling
E08A STX $C8
E08C LDA $E84C
E08F AND #$F0
E091 STA $D1 ; Length of Current File Name
E093 TYA
E094 ORA $D1 ; Length of Current File Name
E096 STA $E84C
E099 LDY #$11
E09B iE09B LDA ($C7),Y ; Pointer: Tape Buffer/ Screen Scrolling
E09D STY $E880 ; 6545/6845 CRT CHIP
E0A0 STA $E881
E0A3 DEY
E0A4 BPL $E09B
E0A6 RTS
; lp2 Get Character From Keyboard Buffer
E0A7 iE0A7 LDY $026F
E0AA LDX #$00
E0AC iE0AC LDA $0270,X ; Keyboard Buffer Queue (FIFO)
E0AF STA $026F,X
E0B2 INX
E0B3 CPX $9E ; No. of Chars. in Keyboard Buffer (Queue)
E0B5 BNE $E0AC
E0B7 DEC $9E ; No. of Chars. in Keyboard Buffer (Queue)
E0B9 TYA
E0BA CLI
E0BB RTS
E0BC iE0BC JSR $E68C
E0BF iE0BF LDA $9E ; No. of Chars. in Keyboard Buffer (Queue)
E0C1 STA $A7 ; Cursor Blink enable: 0 = Flash Cursor
E0C3 BEQ $E0BF
E0C5 SEI
E0C6 LDA $AA ; Flag: Last Cursor Blink On/Off
E0C8 BEQ $E0D3
E0CA LDA $A9 ; Character Under Cursor
E0CC LDY #$00
E0CE STY $AA ; Flag: Last Cursor Blink On/Off
E0D0 JSR $E606 ; ?
E0D3 iE0D3 JSR $E0A7 ; lp2 Get Character From Keyboard Buffer
E0D6 CMP #$83
E0D8 BNE $E0EA
E0DA SEI
E0DB LDX #$09
E0DD STX $9E ; No. of Chars. in Keyboard Buffer (Queue)
E0DF iE0DF LDA $E720,X
E0E2 STA $026E,X
E0E5 DEX
E0E6 BNE $E0DF
E0E8 BEQ $E0BF
E0EA iE0EA CMP #$0D
E0EC BNE $E0BC
E0EE LDY $D5 ; Physical Screen Line Length
E0F0 STY $AC ; Flag: INPUT or GET from Keyboard
E0F2 iE0F2 LDA ($C4),Y ; Pointer: Current Screen Line Address
E0F4 CMP #$20
E0F6 BNE $E0FB
E0F8 DEY
E0F9 BNE $E0F2
E0FB iE0FB INY
E0FC STY $A1 ; Pointer: End of Logical Line for INPUT
E0FE JSR $E1CB ; Goto Left Border
E101 NOP
E102 STY $CD ; Flag: Editor in Quote Mode, $00 = NO
E104 LDA $A3 ; Cursor Y-X Pos. at Start of INPUT
E106 BMI $E121
E108 CMP $D8 ; Current Cursor Physical Line Number
E10A BNE $E121
E10C LDA $A4
E10E STA $C6 ; Cursor Column on Current Line
E110 CMP $A1 ; Pointer: End of Logical Line for INPUT
E112 BCC $E121
E114 BCS $E144
; Input From Screen or Keyboard
E116 iE116 TYA
E117 PHA
E118 TXA
E119 PHA
E11A JMP ($00E9) ; 4.80: input from screen vector (from E006)
E11D LDA $AC ; Flag: INPUT or GET from Keyboard
E11F BEQ $E0BF
E121 iE121 LDY $C6 ; Cursor Column on Current Line
E123 LDA ($C4),Y ; Pointer: Current Screen Line Address
E125 STA $D9 ; Current Character to Print
E127 AND #$3F
E129 ASL $D9 ; Current Character to Print
E12B BIT $D9
E12D BPL $E131
E12F ORA #$80
E131 iE131 BCC $E137
E133 LDX $CD ; Flag: Editor in Quote Mode, $00 = NO
E135 BNE $E13B
E137 iE137 BVS $E13B
E139 ORA #$40
E13B iE13B INC $C6 ; Cursor Column on Current Line
E13D JSR $E16A ; check For Quotes
E140 CPY $A1 ; Pointer: End of Logical Line for INPUT
E142 BNE $E15B
E144 iE144 LDA #$00
E146 STA $AC ; Flag: INPUT or GET from Keyboard
E148 LDA #$0D
E14A LDX $AF ; Default Input Device (0)
E14C CPX #$03
E14E BEQ $E156
E150 LDX $B0 ; Default Output (CMD) Device (3)
E152 CPX #$03
E154 BEQ $E159
E156 iE156 JSR $E202 ; - Output to Screen
E159 iE159 LDA #$0D
E15B iE15B STA $D9 ; Current Character to Print
E15D PLA
E15E TAX
E15F PLA
E160 TAY
E161 LDA $D9 ; Current Character to Print
E163 CMP #$DE
E165 BNE $E169
E167 LDA #$FF
E169 iE169 RTS
; check For Quotes
E16A iE16A CMP #$22
E16C BNE $E176
E16E LDA $CD ; Flag: Editor in Quote Mode, $00 = NO
E170 EOR #$01
E172 STA $CD ; Flag: Editor in Quote Mode, $00 = NO
E174 LDA #$22
E176 iE176 RTS
; Ascii to Screen Code
E177 iE177 ORA #$40
E179 iE179 LDX $9F ; Flag: Print Reverse Chars. -1=Yes, 0=No Used
E17B BEQ $E17F
E17D iE17D ORA #$80
E17F iE17F LDX $DC ; Flag: Insert Mode, >0 = # INSTs
E181 BEQ $E185
E183 DEC $DC ; Flag: Insert Mode, >0 = # INSTs
E185 iE185 JSR $E606 ; ?
E188 INC $C6 ; Cursor Column on Current Line
E18A LDY $D5 ; Physical Screen Line Length
E18C CPY $C6 ; Cursor Column on Current Line
E18E BCS $E199
E190 LDX $D8 ; Current Cursor Physical Line Number
E192 iE192 JSR $E3A3 ; - Go to Next Line
E195 LDY $E2 ; 4.80: first column of window
E197 STY $C6 ; Cursor Column on Current Line
E199 iE199 LDA #$00
E19B STA $E8 ; 4.80: Home Count
E19D iE19D PLA
E19E TAY
E19F LDA $DC ; Flag: Insert Mode, >0 = # INSTs
E1A1 BEQ $E1A5
E1A3 LSR $CD ; Flag: Editor in Quote Mode, $00 = NO
E1A5 iE1A5 PLA
E1A6 TAX
E1A7 PLA
E1A8 CLI
E1A9 RTS
E1AA iE1AA LDY $D5 ; Physical Screen Line Length
E1AC LDX $E0 ; 3+4.40: Screen Line Link Table / Editor Temps
E1AE CPX $D8 ; Current Cursor Physical Line Number
E1B0 BCC $E1BA
E1B2 LDY $E2 ; 4.80: first column of window
E1B4 STY $C6 ; Cursor Column on Current Line
E1B6 PLA
E1B7 PLA
E1B8 BNE $E199
E1BA iE1BA DEC $D8 ; Current Cursor Physical Line Number
E1BC STY $C6 ; Cursor Column on Current Line
E1BE JMP $E067 ; - Set Screen Pointers
; - Clear Screen Line
E1C1 iE1C1 LDA #$20
E1C3 iE1C3 INY
E1C4 STA ($C4),Y ; Pointer: Current Screen Line Address
E1C6 CPY $D5 ; Physical Screen Line Length
E1C8 BCC $E1C3
E1CA RTS
; Goto Left Border
E1CB iE1CB LDY $E2 ; 4.80: first column of window
E1CD STY $C6 ; Cursor Column on Current Line
E1CF LDY #$00
E1D1 RTS
; Exit Window
E1D2 iE1D2 LDA #$00
E1D4 TAX
E1D5 JSR $E1E1 ; Set Window Top
E1D8 LDA #$18
E1DA LDX #$4F
; Set Window Bottom
E1DC iE1DC STA $E1 ; 4.80: last line of window
E1DE STX $D5 ; Physical Screen Line Length
E1E0 RTS
; Set Window Top
E1E1 iE1E1 STA $E0 ; 3+4.40: Screen Line Link Table / Editor Temps
E1E3 STX $E2 ; 4.80: first column of window
E1E5 RTS
; Unused EMPTY
E1E6 .byte AA AA AA AA AA AA AA AA ;........
E1EE .byte AA AA AA AA AA AA AA AA ;........
E1F6 .byte AA AA AA AA AA AA AA AA ;........
E1FE .byte AA AA AA AA ;....
; - Output to Screen
E202 iE202 PHA
E203 STA $D9 ; Current Character to Print
E205 TXA
E206 PHA
E207 TYA
E208 PHA
E209 JMP ($00EB) ; 4.80: print to screen vector (from E009)
E20C LDA #$00
E20E STA $AC ; Flag: INPUT or GET from Keyboard
E210 LDY $C6 ; Cursor Column on Current Line
E212 LDA $D9 ; Current Character to Print
E214 AND #$7F
E216 CMP #$1B
E218 BNE $E21D
E21A JMP $E3BD
E21D iE21D LDA $D9 ; Current Character to Print
E21F BPL $E224 ; - -unshifted characters-
E221 JMP $E2F4 ; - -shifted characters-
; - -unshifted characters-
E224 iE224 CMP #$0D
E226 BNE $E22B
E228 JMP $E3B6 ; - Output <CR>
E22B iE22B CMP #$20
E22D BCC $E237
E22F AND #$3F
E231 JSR $E16A ; check For Quotes
E234 JMP $E179
E237 iE237 LDX $DC ; Flag: Insert Mode, >0 = # INSTs
E239 BEQ $E23E
E23B JMP $E17D
E23E iE23E CMP #$14
E240 BNE $E262
E242 LDY $E2 ; 4.80: first column of window
E244 CPY $C6 ; Cursor Column on Current Line
E246 BCC $E24D
E248 JSR $E1AA
E24B BNE $E25C
E24D iE24D DEC $C6 ; Cursor Column on Current Line
E24F LDY $C6 ; Cursor Column on Current Line
E251 iE251 INY
E252 LDA ($C4),Y ; Pointer: Current Screen Line Address
E254 DEY
E255 STA ($C4),Y ; Pointer: Current Screen Line Address
E257 INY
E258 CPY $D5 ; Physical Screen Line Length
E25A BNE $E251
E25C iE25C LDA #$20
E25E STA ($C4),Y ; Pointer: Current Screen Line Address
E260 BNE $E299
E262 iE262 LDX $CD ; Flag: Editor in Quote Mode, $00 = NO
E264 BEQ $E269
E266 JMP $E17D
E269 iE269 CMP #$12
E26B BNE $E26F
E26D STA $9F ; Flag: Print Reverse Chars. -1=Yes, 0=No Used
E26F iE26F CMP #$13
E271 BNE $E283
E273 LDA $E8 ; 4.80: Home Count
E275 BPL $E27B
E277 JSR $E1D2 ; Exit Window
E27A CLC
E27B iE27B ROR $E8 ; 4.80: Home Count
E27D JSR $E05F
E280 JMP $E19D
E283 iE283 CMP #$1D
E285 BNE $E292
E287 INY
E288 STY $C6 ; Cursor Column on Current Line
E28A DEY
E28B CPY $D5 ; Physical Screen Line Length
E28D BCC $E299
E28F JMP $E192
E292 iE292 CMP #$11
E294 BNE $E29C
E296 JSR $E3A3 ; - Go to Next Line
E299 iE299 JMP $E199
E29C iE29C CMP #$09
E29E BNE $E2D0
E2A0 JSR $E570 ; ?
E2A3 iE2A3 LDY $033A ; Tape I/O Buffer #2
E2A6 INC $033A ; Tape I/O Buffer #2
E2A9 CPY $D5 ; Physical Screen Line Length
E2AB BCC $E2B6
E2AD LDA $D5 ; Physical Screen Line Length
E2AF STA $C6 ; Cursor Column on Current Line
E2B1 DEC $033A ; Tape I/O Buffer #2
E2B4 BNE $E299
E2B6 iE2B6 ASL $033E ; 4: DOS 8-bit syntax checking flag
E2B9 BNE $E2C5
E2BB INX
E2BC CPX #$0A
E2BE BEQ $E299
E2C0 LDA #$01
E2C2 STA $033E ; 4: DOS 8-bit syntax checking flag
E2C5 iE2C5 LDA $03EE,X ; 4.80: Table of 80 bits to set TABs
E2C8 AND $033E ; 4: DOS 8-bit syntax checking flag
E2CB BEQ $E2A3
E2CD INY
E2CE STY $C6 ; Cursor Column on Current Line
E2D0 iE2D0 CMP #$16
E2D2 BNE $E2E0
E2D4 LDA #$20
E2D6 DEY
E2D7 iE2D7 INY
E2D8 STA ($C4),Y ; Pointer: Current Screen Line Address
E2DA CPY $D5 ; Physical Screen Line Length
E2DC BCC $E2D7
E2DE BCS $E299
E2E0 iE2E0 CMP #$15
E2E2 BEQ $E2E7
E2E4 JMP $E591 ; (?)
E2E7 iE2E7 LDA $E0 ; 3+4.40: Screen Line Link Table / Editor Temps
E2E9 PHA
E2EA LDA $D8 ; Current Cursor Physical Line Number
E2EC STA $E0 ; 3+4.40: Screen Line Link Table / Editor Temps
E2EE JSR $E3E8 ; - Scroll Screen
E2F1 JMP $E5CA
; - -shifted characters-
E2F4 iE2F4 AND #$7F
E2F6 CMP #$7F
E2F8 BNE $E2FC
E2FA LDA #$5E
E2FC iE2FC CMP #$20
E2FE BCC $E303
E300 JMP $E177 ; Ascii to Screen Code
E303 iE303 CMP #$0D
E305 BNE $E30A
E307 JMP $E3B6 ; - Output <CR>
E30A iE30A LDX $CD ; Flag: Editor in Quote Mode, $00 = NO
E30C BNE $E342
E30E CMP #$14
E310 BNE $E33E
E312 LDY $D5 ; Physical Screen Line Length
E314 LDA ($C4),Y ; Pointer: Current Screen Line Address
E316 CMP #$20
E318 BNE $E38C
E31A CPY $C6 ; Cursor Column on Current Line
E31C BCC $E38C
E31E BEQ $E38C
E320 LDY $D5 ; Physical Screen Line Length
E322 iE322 DEY
E323 LDA ($C4),Y ; Pointer: Current Screen Line Address
E325 INY
E326 STA ($C4),Y ; Pointer: Current Screen Line Address
E328 DEY
E329 CPY $C6 ; Cursor Column on Current Line
E32B BNE $E322
E32D LDA #$20
E32F STA ($C4),Y ; Pointer: Current Screen Line Address
E331 LDA $D5 ; Physical Screen Line Length
E333 SEC
E334 SBC $C6 ; Cursor Column on Current Line
E336 SBC $DC ; Flag: Insert Mode, >0 = # INSTs
E338 BMI $E38C
E33A INC $DC ; Flag: Insert Mode, >0 = # INSTs
E33C BNE $E38C
E33E iE33E LDX $DC ; Flag: Insert Mode, >0 = # INSTs
E340 BEQ $E347
E342 iE342 ORA #$40
E344 JMP $E17D
E347 iE347 CMP #$11
E349 BNE $E358
E34B LDX $E0 ; 3+4.40: Screen Line Link Table / Editor Temps
E34D CPX $D8 ; Current Cursor Physical Line Number
E34F BCS $E38C
E351 DEC $D8 ; Current Cursor Physical Line Number
E353 JSR $E067 ; - Set Screen Pointers
E356 BNE $E38C
E358 iE358 CMP #$12
E35A BNE $E360
E35C LDA #$00
E35E STA $9F ; Flag: Print Reverse Chars. -1=Yes, 0=No Used
E360 iE360 CMP #$1D
E362 BNE $E373
E364 LDY $E2 ; 4.80: first column of window
E366 CPY $C6 ; Cursor Column on Current Line
E368 BCC $E36F
E36A JSR $E1AA
E36D BNE $E38C
E36F iE36F DEC $C6 ; Cursor Column on Current Line
E371 BPL $E38C
E373 iE373 CMP #$13
E375 BNE $E37C
E377 JSR $E051 ; - Clear Screen
E37A BNE $E38C
E37C iE37C CMP #$09
E37E BNE $E38F
E380 JSR $E570 ; ?
E383 LDA $03EE,X ; 4.80: Table of 80 bits to set TABs
E386 EOR $033E ; 4: DOS 8-bit syntax checking flag
E389 STA $03EE,X ; 4.80: Table of 80 bits to set TABs
E38C iE38C JMP $E199
E38F iE38F CMP #$16
E391 BEQ $E396
E393 JMP $E5BC
E396 iE396 LDA #$20
E398 LDY $E2 ; 4.80: first column of window
E39A iE39A CPY $C6 ; Cursor Column on Current Line
E39C BCS $E38C
E39E STA ($C4),Y ; Pointer: Current Screen Line Address
E3A0 INY
E3A1 BNE $E39A
; - Go to Next Line
E3A3 iE3A3 LSR $A3 ; Cursor Y-X Pos. at Start of INPUT
E3A5 LDX $D8 ; Current Cursor Physical Line Number
E3A7 CPX $E1 ; 4.80: last line of window
E3A9 BCC $E3B1
E3AB JSR $E3E8 ; - Scroll Screen
E3AE JMP $E067 ; - Set Screen Pointers
E3B1 iE3B1 INC $D8 ; Current Cursor Physical Line Number
E3B3 JMP $E067 ; - Set Screen Pointers
; - Output <CR>
E3B6 iE3B6 LDY $E2 ; 4.80: first column of window
E3B8 STY $C6 ; Cursor Column on Current Line
E3BA JSR $E3A3 ; - Go to Next Line
E3BD iE3BD LDA #$00
E3BF STA $DC ; Flag: Insert Mode, >0 = # INSTs
E3C1 STA $9F ; Flag: Print Reverse Chars. -1=Yes, 0=No Used
E3C3 STA $CD ; Flag: Editor in Quote Mode, $00 = NO
E3C5 JMP $E199
; ?
E3C8 iE3C8 LDX $E1 ; 4.80: last line of window
E3CA INX
E3CB iE3CB DEX
E3CC JSR $E06C
E3CF CPX $E0 ; 3+4.40: Screen Line Link Table / Editor Temps
E3D1 BEQ $E408
E3D3 LDA $E754,X
E3D6 STA $C7 ; Pointer: Tape Buffer/ Screen Scrolling
E3D8 LDA $E76D,X
E3DB STA $C8
E3DD iE3DD INY
E3DE LDA ($C7),Y ; Pointer: Tape Buffer/ Screen Scrolling
E3E0 STA ($C4),Y ; Pointer: Current Screen Line Address
E3E2 CPY $D5 ; Physical Screen Line Length
E3E4 BCC $E3DD
E3E6 BCS $E3CB
; - Scroll Screen
E3E8 iE3E8 LDX $E0 ; 3+4.40: Screen Line Link Table / Editor Temps
E3EA DEX
E3EB iE3EB INX
E3EC JSR $E06C
E3EF CPX $E1 ; 4.80: last line of window
E3F1 BCS $E408
E3F3 LDA $E756,X
E3F6 STA $C7 ; Pointer: Tape Buffer/ Screen Scrolling
E3F8 LDA $E76F,X
E3FB STA $C8
E3FD iE3FD INY
E3FE LDA ($C7),Y ; Pointer: Tape Buffer/ Screen Scrolling
E400 STA ($C4),Y ; Pointer: Current Screen Line Address
E402 CPY $D5 ; Physical Screen Line Length
E404 BCC $E3FD
E406 BCS $E3EB
E408 iE408 JSR $E1C1 ; - Clear Screen Line
E40B LDA $E812
E40E CMP #$FE
E410 BNE $E420
E412 LDY #$00
E414 iE414 NOP
E415 DEX
E416 BNE $E414
E418 DEY
E419 BNE $E414
E41B iE41B LDY #$00
E41D STY $9E ; No. of Chars. in Keyboard Buffer (Queue)
E41F iE41F RTS
E420 iE420 CMP #$DF
E422 BNE $E41F
E424 iE424 LDA $E812
E427 CMP #$DF
E429 BEQ $E424
E42B CMP #$FF
E42D BEQ $E424
E42F BNE $E41B
E431 iE431 JSR $FFEA ; jmp $f768 udtim Update System Jiffy Clock
E434 INC $F8 ; 4.80: Counter to speed TI by 6/5
E436 LDA $F8 ; 4.80: Counter to speed TI by 6/5
E438 CMP #$06
E43A BNE $E458
E43C LDA #$00
E43E STA $F8 ; 4.80: Counter to speed TI by 6/5
E440 BEQ $E431
; - Main IRQ Entry Point
E442 iE442 PHA
E443 TXA
E444 PHA
E445 TYA
E446 PHA
E447 TSX
E448 LDA $0104,X
E44B AND #$10
E44D BEQ $E452
E44F JMP ($0092) ; Vector: BRK Instr. Interrupt [3: FD17, 4: D478]
E452 iE452 JMP ($0090) ; Vector: Hardware Interrupt [3: E62E, 4: E455]
; ?
E455 iE455 JMP $E431
E458 iE458 LDA $A7 ; Cursor Blink enable: 0 = Flash Cursor
E45A BNE $E47A
E45C DEC $A8 ; Timer: Countdown to Toggle Cursor
E45E BNE $E47A
E460 LDA #$14
E462 BIT $E4
E464 BPL $E468
E466 LDA #$02
E468 iE468 STA $A8 ; Timer: Countdown to Toggle Cursor
E46A LDY $C6 ; Cursor Column on Current Line
E46C LSR $AA ; Flag: Last Cursor Blink On/Off
E46E LDA ($C4),Y ; Pointer: Current Screen Line Address
E470 BCS $E476
E472 INC $AA ; Flag: Last Cursor Blink On/Off
E474 STA $A9 ; Character Under Cursor
E476 iE476 EOR #$80
E478 STA ($C4),Y ; Pointer: Current Screen Line Address
E47A iE47A LDY #$00
E47C LDA $E810 ; PIA 1 CHIP
E47F AND #$F0
E481 STA $E810 ; PIA 1 CHIP
E484 LDA $E810 ; PIA 1 CHIP
E487 ASL
E488 ASL
E489 ASL
E48A BPL $E495
E48C STY $F9 ; Tape Motor Interlock #1
E48E LDA $E813
E491 ORA #$08
E493 BNE $E49E
E495 iE495 LDA $F9 ; Tape Motor Interlock #1
E497 BNE $E4A1
E499 LDA $E813
E49C AND #$F7
E49E iE49E STA $E813
E4A1 iE4A1 BCC $E4AC
E4A3 STY $FA ; Tape Motor Interlock #2
E4A5 LDA $E840 ; VIA CHIP
E4A8 ORA #$10
E4AA BNE $E4B5
E4AC iE4AC LDA $FA ; Tape Motor Interlock #2
E4AE BNE $E4B8
E4B0 LDA $E840 ; VIA CHIP
E4B3 AND #$EF
E4B5 iE4B5 STA $E840 ; VIA CHIP
E4B8 iE4B8 JSR $E4BE ; scnkey Scan Keyboard
E4BB JMP $E600 ; - Return From Interrupt
; scnkey Scan Keyboard
E4BE iE4BE LDY #$FF
E4C0 STY $A6 ; Key Image
E4C2 INY
E4C3 STY $98 ; Flag: Print Shifted Chars.
E4C5 LDA $E4 ; 4.80: Flag: REPEAT Key Used, $80 = Repeat, $40 = disable
E4C7 AND #$7F
E4C9 STA $E4 ; 4.80: Flag: REPEAT Key Used, $80 = Repeat, $40 = disable
E4CB LDX #$50
E4CD iE4CD LDY #$08
E4CF LDA $E812
E4D2 CMP $E812
E4D5 BNE $E4CD
E4D7 iE4D7 LSR
E4D8 BCS $E4F9
E4DA PHA
E4DB LDA $E6D0,X
E4DE BNE $E4E6
E4E0 LDA #$01
E4E2 STA $98 ; Flag: Print Shifted Chars.
E4E4 BNE $E4F8
E4E6 iE4E6 CMP #$10
E4E8 BNE $E4F2
E4EA LDA $E4 ; 4.80: Flag: REPEAT Key Used, $80 = Repeat, $40 = disable
E4EC ORA #$80
E4EE STA $E4 ; 4.80: Flag: REPEAT Key Used, $80 = Repeat, $40 = disable
E4F0 BMI $E4F8
E4F2 iE4F2 CMP #$FF
E4F4 BEQ $E4F8
E4F6 STA $A6 ; Key Image
E4F8 iE4F8 PLA
E4F9 iE4F9 DEX
E4FA BEQ $E504 ; - Process Key Image
E4FC DEY
E4FD BNE $E4D7
E4FF INC $E810 ; PIA 1 CHIP
E502 BNE $E4CD
; - Process Key Image
E504 iE504 LDA $A6 ; Key Image
E506 CMP $97 ; Current Key Pressed: 255 = No Key
E508 BEQ $E510
E50A LDX #$10
E50C STX $E6 ; 4.80: Repeat Delay Counter
E50E BNE $E53F
E510 iE510 BIT $E4
E512 BMI $E532
E514 BVS $E56F
E516 CMP #$FF
E518 BEQ $E56F
E51A CMP #$14
E51C BEQ $E52A
E51E CMP #$20
E520 BEQ $E52A
E522 CMP #$1D
E524 BEQ $E52A
E526 CMP #$11
E528 BNE $E56F
E52A iE52A LDX $E6 ; 4.80: Repeat Delay Counter
E52C BEQ $E532
E52E DEC $E6 ; 4.80: Repeat Delay Counter
E530 BNE $E56F
E532 iE532 DEC $E5 ; 4.80: Repeat Speed Counter
E534 BNE $E56F
E536 LDX #$04
E538 STX $E5 ; 4.80: Repeat Speed Counter
E53A LDX $9E ; No. of Chars. in Keyboard Buffer (Queue)
E53C DEX
E53D BPL $E56F
E53F iE53F STA $97 ; Current Key Pressed: 255 = No Key
E541 CMP #$FF
E543 BEQ $E56F
E545 TAX
E546 PHP
E547 AND #$7F
E549 PLP
E54A BMI $E563
E54C LSR $98 ; Flag: Print Shifted Chars.
E54E BCC $E563
E550 CMP #$2C
E552 BCC $E561
E554 CMP #$3C
E556 BCS $E561
E558 SBC #$0F
E55A CMP #$20
E55C BCS $E563
E55E ADC #$20
E560 BIT $8009
; *** E560: ADDRESS DIFFER. This may indicate misassembly ***
E563 iE563 LDX $9E ; No. of Chars. in Keyboard Buffer (Queue)
E565 CPX $E3 ; 4.80: Size of Keyboard Buffer
E567 BCS $E56F
E569 STA $026F,X
E56C INX
E56D STX $9E ; No. of Chars. in Keyboard Buffer (Queue)
E56F iE56F RTS
; ?
E570 iE570 LDA $C6 ; Cursor Column on Current Line
E572 AND #$F8
E574 STA $033A ; Tape I/O Buffer #2
E577 LSR
E578 LSR
E579 LSR
E57A TAX
E57B LDA #$01
E57D STA $033E ; 4: DOS 8-bit syntax checking flag
E580 LDY $C6 ; Cursor Column on Current Line
E582 iE582 CPY $033A ; Tape I/O Buffer #2
E585 BEQ $E590
E587 ASL $033E ; 4: DOS 8-bit syntax checking flag
E58A INC $033A ; Tape I/O Buffer #2
E58D JMP $E582
E590 iE590 RTS
; (?)
E591 iE591 CMP #$19
E593 BNE $E59B
E595 JSR $E3E8 ; - Scroll Screen
E598 JMP $E5D9
E59B iE59B CMP #$0F
E59D BNE $E5AA
E59F LDA $D8 ; Current Cursor Physical Line Number
E5A1 STA $E0 ; 3+4.40: Screen Line Link Table / Editor Temps
E5A3 LDA $C6 ; Cursor Column on Current Line
E5A5 STA $E2 ; 4.80: first column of window
E5A7 iE5A7 JMP $E199
E5AA iE5AA CMP #$0E
E5AC BNE $E5B3
E5AE JSR $E07A ; Initialize CRTC --
E5B1 BMI $E5A7
E5B3 iE5B3 CMP #$07
E5B5 BNE $E5A7
E5B7 JSR $E6A7 ; ?
E5BA BEQ $E5A7
E5BC iE5BC CMP #$15
E5BE BNE $E5D2
E5C0 LDA $E0 ; 3+4.40: Screen Line Link Table / Editor Temps
E5C2 PHA
E5C3 LDA $D8 ; Current Cursor Physical Line Number
E5C5 STA $E0 ; 3+4.40: Screen Line Link Table / Editor Temps
E5C7 JSR $E3C8 ; ?
E5CA iE5CA PLA
E5CB STA $E0 ; 3+4.40: Screen Line Link Table / Editor Temps
E5CD JSR $E063
E5D0 BNE $E5EA
E5D2 iE5D2 CMP #$19
E5D4 BNE $E5DE
E5D6 JSR $E3C8 ; ?
E5D9 iE5D9 JSR $E067 ; - Set Screen Pointers
E5DC BNE $E5EA
E5DE iE5DE CMP #$0F
E5E0 BNE $E5ED
E5E2 LDA $D8 ; Current Cursor Physical Line Number
E5E4 STA $E1 ; 4.80: last line of window
E5E6 LDA $C6 ; Cursor Column on Current Line
E5E8 STA $D5 ; Physical Screen Line Length
E5EA iE5EA JMP $E199
E5ED iE5ED CMP #$0E
E5EF BNE $E5B3
E5F1 JSR $E082 ; Initialize CRTC --
E5F4 BMI $E5EA
E5F6 TAX
E5F7 TAX
E5F8 TAX
E5F9 TAX
E5FA TAX
E5FB TAX
E5FC TAX
E5FD TAX
E5FE TAX
E5FF TAX
; - Return From Interrupt
E600 iE600 PLA
E601 TAY
E602 PLA
E603 TAX
E604 PLA
E605 RTI
; ?
E606 iE606 LDY $C6 ; Cursor Column on Current Line
E608 STA ($C4),Y ; Pointer: Current Screen Line Address
E60A LDA #$02
E60C STA $A8 ; Timer: Countdown to Toggle Cursor
E60E RTS
; cint1 Initialize I/O
E60F iE60F LDA #$7F
E611 STA $E84E
E614 LDX #$6D
E616 LDA #$00
E618 STA $E8 ; 4.80: Home Count
E61A STA $E4 ; 4.80: Flag: REPEAT Key Used, $80 = Repeat, $40 = disable
E61C iE61C STA $8D,X ; Real-Time Jiffy Clock (approx) 1/60 Sec
E61E DEX
E61F BPL $E61C
E621 LDA #$55
E623 STA $90 ; Vector: Hardware Interrupt [3: E62E, 4: E455]
E625 LDA #$E4
E627 STA $91
E629 LDA #$09
E62B STA $E3 ; 4.80: Size of Keyboard Buffer
E62D LDA #$03
E62F STA $B0 ; Default Output (CMD) Device (3)
E631 LDA #$0F
E633 STA $E810 ; PIA 1 CHIP
E636 ASL
E637 STA $E840 ; VIA CHIP
E63A STA $E842
E63D STX $E822
E640 STX $E845
E643 LDA #$3D
E645 STA $E813
E648 BIT $E812
E64B LDA #$3C
E64D STA $E821
E650 STA $E823
E653 STA $E811
E656 STX $E822
E659 LDA #$0E
E65B STA $A8 ; Timer: Countdown to Toggle Cursor
E65D STA $A7 ; Cursor Blink enable: 0 = Flash Cursor
E65F STA $E6 ; 4.80: Repeat Delay Counter
E661 STA $E5 ; 4.80: Repeat Speed Counter
E663 STA $E84E
E666 JSR $E1D2 ; Exit Window
E669 LDX #$0C
E66B LDA #$00
E66D iE66D STA $03EE,X ; 4.80: Table of 80 bits to set TABs
E670 DEX
E671 BPL $E66D
E673 LDA #$1D
E675 LDX #$E1
E677 STA $E9 ; 4.80: input from screen vector (from E006)
E679 STX $EA
E67B LDA #$0C
E67D LDX #$E2
E67F STA $EB ; 4.80: print to screen vector (from E009)
E681 STX $EC
E683 LDA #$10
E685 STA $E7 ; 4.80: Chime Time
E687 JSR $E6A4
E68A BEQ $E6A4
E68C iE68C JSR $E202 ; - Output to Screen
E68F TAX
E690 LDA $D5 ; Physical Screen Line Length
E692 SEC
E693 SBC $C6 ; Cursor Column on Current Line
E695 CMP #$05
E697 BNE $E6D0
E699 TXA
E69A CMP #$1D
E69C BEQ $E6A4
E69E AND #$7F
E6A0 CMP #$20
E6A2 BCC $E6D0
E6A4 iE6A4 JSR $E6A7 ; ?
; ?
E6A7 iE6A7 LDY $E7 ; 4.80: Chime Time
E6A9 BEQ $E6D0
E6AB LDA #$10
E6AD STA $E84B
E6B0 LDA #$0F
E6B2 STA $E84A
E6B5 LDX #$07
E6B7 iE6B7 LDA $E74D,X ; Timer 2 LO Values DATA
E6BA STA $E848
E6BD LDA $E7 ; 4.80: Chime Time
E6BF iE6BF DEY
E6C0 BNE $E6BF
E6C2 SEC
E6C3 SBC #$01
E6C5 BNE $E6BF
E6C7 DEX
E6C8 BNE $E6B7
E6CA STX $E84A
E6CD STX $E84B
E6D0 sE6D0 RTS
; - Keyboard decoding table DATA
; 00 = Shift
; 10 = Repeat
; 80 flags unshiftable key
; FF = No key
;
E6D1 .byte 16 04 3A 03 39 36 33 DF ;..:.963.
E6D9 .byte B1 2F 15 13 4D 20 58 12 ;./..m x.
E6E1 .byte B2 10 0F B0 2C 4E 56 5A ;....,nvz
E6E9 .byte B3 00 19 AE 2E 42 43 00 ;.....bc.
E6F1 .byte B4 5D 4F 11 55 54 45 51 ;.]o.uteq
E6F9 .byte 14 50 49 C0 59 52 57 09 ;.pi.yrw.
E701 .byte B6 5B 4C 0D 4A 47 44 41 ;.[l.jgda
E709 .byte B5 5C 4B 3B 48 46 53 9B ;.k;hfs.
E711 .byte B9 06 DE B7 B0 37 34 31 ;.....741
E719 .byte 05 0E 1D B8 2D 38 35 ;....-85
E720 sE720 .byte 32 ;2
; Shitf-Run Equivalent DATA
E721 .byte 44 CC 22 2A 0D 52 55 4E ;dL"*.run
E729 .byte 0D ;.
; - Video Chip Setup Table -- e07a DATA
E72A .byte 31 28 29 0F 27 00 19 20 ;1().'..
E732 .byte 00 09 00 00 10 00 00 00 ;........
E73A .byte 00 00 ;..
; - Video Chip Setup Table -- e08a DATA
E73C .byte 31 28 29 0F 31 00 19 25 ;1().1..%
E744 .byte 00 07 00 00 10 00 00 00 ;........
E74C .byte 00 ;.
; Timer 2 LO Values DATA
E74D sE74D .byte 00 0E 1E 3E 7E 3E 1E ;...>~>.
E754 sE754 .byte 0E ;.
; - Screen Line Addresses LO DATA
E755 sE755 .byte 00 ;.
E756 sE756 .byte 50 A0 F0 40 90 E0 30 80 ;p..@..0.
E75E .byte D0 20 70 C0 10 60 B0 00 ;P P..`..
E766 .byte 50 A0 F0 40 90 E0 30 ;p..@..0
E76D sE76D .byte 80 ;.
; - Screen Line Addresses HI DATA
E76E sE76E .byte 80 ;.
E76F sE76F .byte 80 80 80 81 81 81 82 82 ;........
E777 .byte 82 83 83 83 84 84 84 85 ;........
E77F .byte 85 85 85 86 86 86 87 87 ;........
E787 .byte BF ;.
; Unused EMPTY
;
; I/O Area E800 - EFFF
;
E788 .byte AA AA AA AA AA AA AA AA ;........
E790 .byte AA AA AA AA AA AA AA AA ;........
E798 .byte AA AA AA AA AA AA AA AA ;........
E7A0 .byte AA AA AA AA AA AA AA AA ;........
E7A8 .byte AA AA AA AA AA AA AA AA ;........
E7B0 .byte AA AA AA AA AA AA AA AA ;........
E7B8 .byte AA AA AA AA AA AA AA AA ;........
E7C0 .byte AA AA AA AA AA AA AA AA ;........
E7C8 .byte AA AA AA AA AA AA AA AA ;........
E7D0 .byte AA AA AA AA AA AA AA AA ;........
E7D8 .byte AA AA AA AA AA AA AA AA ;........
E7E0 .byte AA AA AA AA AA AA AA AA ;........
E7E8 .byte AA AA AA AA AA AA AA AA ;........
E7F0 .byte AA AA AA AA AA AA AA AA ;........
E7F8 .byte AA AA AA AA AA AA AA AA ;........
; Unused EMPTY
E800 .byte E8 E8 E8 E8 E8 E8 E8 E8 ;........
E808 .byte E8 E8 E8 E8 E8 E8 E8 E8 ;........
; PIA 1 CHIP
E810 sE810 .byte F9 ;.
E811 sE811 .byte 3C ;<
E812 sE812 .byte FF ;.
E813 sE813 .byte 3D F9 3C FF 3D F9 3C FF ;=.<.=.<.
E81B .byte 3D F9 3C FF 3D ;=.<.=
; PIA 2 CHIP
E820 sE820 .byte FF ;.
E821 sE821 .byte BC ;.
E822 sE822 .byte FF ;.
E823 sE823 .byte 3C FF BC FF 3C FF BC FF ;<...<...
E82B .byte 3C FF BC FF 3C F9 3C FF ;<...<.<.
E833 .byte 3C F9 3C FF 3C F9 3C FF ;<.<.<.<.
E83B .byte 3C F9 3C FF 3C ;<.<.<
; VIA CHIP
E840 sE840 .byte FE FF ;..
E842 sE842 .byte 1E 00 ;..
E844 sE844 .byte 5B ;[
E845 sE845 .byte F9 77 FF ;.W.
E848 sE848 .byte 7D ;}
E849 sE849 .byte 26 ;&
E84A sE84A .byte 00 ;.
E84B sE84B .byte 00 ;.
E84C sE84C .byte 0E 00 ;..
E84E sE84E .byte 80 FF FE FF 1E 00 5B F9 ;......[.
E856 .byte 77 FF 3E 5B 00 00 0E 00 ;W.>[....
E85E .byte 80 FF FE FF 1E 00 5B F9 ;......[.
E866 .byte 77 FF 01 E9 00 00 0E 00 ;W.......
E86E .byte 80 FF FE BC 1E 00 5B B8 ;......[.
E876 .byte 77 3D C9 0C 00 00 0E 00 ;W=I.....
E87E .byte 80 3D ;.=
; 6545/6845 CRT CHIP
E880 sE880 .byte E8 ;.
E881 sE881 .byte 00 E8 00 E8 00 E8 00 E8 ;........
E889 .byte 00 E8 00 E8 00 E8 00 F9 ;........
E891 .byte 00 FF 00 F9 00 FF 00 F9 ;........
E899 .byte 00 FF 00 F9 00 FF 00 FF ;........
E8A1 .byte 00 FF 00 FF 00 FF 00 FF ;........
E8A9 .byte 00 FF 00 FF 00 FF 00 F9 ;........
E8B1 .byte 00 FF 00 F9 00 FF 00 F9 ;........
E8B9 .byte 00 FF 00 F9 00 FF 00 ;.......
; ? CHIP
E8C0 .byte FE 00 1E 00 5B 80 77 00 ;....[.W.
E8C8 .byte 2A A0 00 00 0E 00 80 00 ;*.......
E8D0 .byte FE 30 1E 00 5B 38 77 3C ;.0..[8W<
E8D8 .byte E5 14 00 00 0E 00 80 3C ;.......<
E8E0 .byte FE BC 1E 00 5B B8 77 30 ;....[.W0
E8E8 .byte 71 08 00 00 0E 00 80 30 ;Q......0
E8F0 .byte FE 3C 1E 00 5B 38 77 3C ;.<..[8W<
E8F8 .byte 89 28 00 00 0E 00 80 3C ;.(.....<
; Unused EMPTY
;
; Kernel (F000-FFFF)
; Tape processing, IEEE-488, jump table
;
E900 .byte E9 E9 E9 E9 E9 E9 E9 E9 ;........
E908 .byte E9 E9 E9 E9 E9 E9 E9 E9 ;........
E910 .byte E9 E9 E9 E9 E9 E9 E9 E9 ;........
E918 .byte E9 E9 E9 E9 E9 E9 E9 E9 ;........
E920 .byte E9 E9 E9 E9 E9 E9 E9 E9 ;........
E928 .byte E9 E9 E9 E9 E9 E9 E9 E9 ;........
E930 .byte E9 E9 E9 E9 E9 E9 E9 E9 ;........
E938 .byte E9 E9 E9 E9 E9 E9 E9 E9 ;........
E940 .byte E9 E9 E9 E9 E9 E9 E9 E9 ;........
E948 .byte E9 E9 E9 E9 E9 E9 E9 E9 ;........
E950 .byte E9 E9 E9 E9 E9 E9 E9 E9 ;........
E958 .byte E9 E9 E9 E9 E9 E9 E9 E9 ;........
E960 .byte E9 E9 E9 E9 E9 E9 E9 E9 ;........
E968 .byte E9 E9 E9 E9 E9 E9 E9 E9 ;........
E970 .byte E9 E9 E9 E9 E9 E9 E9 E9 ;........
E978 .byte E9 E9 E9 E9 E9 E9 E9 E9 ;........
E980 .byte E9 E9 E9 E9 E9 E9 E9 E9 ;........
E988 .byte E9 E9 E9 E9 E9 E9 E9 E9 ;........
E990 .byte E9 E9 E9 E9 E9 E9 E9 E9 ;........
E998 .byte E9 E9 E9 E9 E9 E9 E9 E9 ;........
E9A0 .byte E9 E9 E9 E9 E9 E9 E9 E9 ;........
E9A8 .byte E9 E9 E9 E9 E9 E9 E9 E9 ;........
E9B0 .byte E9 E9 E9 E9 E9 E9 E9 E9 ;........
E9B8 .byte E9 E9 E9 E9 E9 E9 E9 E9 ;........
E9C0 .byte E9 E9 E9 E9 E9 E9 E9 E9 ;........
E9C8 .byte E9 E9 E9 E9 E9 E9 E9 E9 ;........
E9D0 .byte E9 E9 E9 E9 E9 E9 E9 E9 ;........
E9D8 .byte E9 E9 E9 E9 E9 E9 E9 E9 ;........
E9E0 .byte E9 E9 E9 E9 E9 E9 E9 E9 ;........
E9E8 .byte E9 E9 E9 E9 E9 E9 E9 E9 ;........
E9F0 .byte E9 E9 E9 E9 E9 E9 E9 E9 ;........
E9F8 .byte E9 E9 E9 E9 E9 E9 E9 E9 ;........
EA00 .byte EA EA EA EA EA EA EA EA ;........
EA08 .byte EA EA EA EA EA EA EA EA ;........
EA10 .byte EA EA EA EA EA EA EA EA ;........
EA18 .byte EA EA EA EA EA EA EA EA ;........
EA20 .byte EA EA EA EA EA EA EA EA ;........
EA28 .byte EA EA EA EA EA EA EA EA ;........
EA30 .byte EA EA EA EA EA EA EA EA ;........
EA38 .byte EA EA EA EA EA EA EA EA ;........
EA40 .byte EA EA EA EA EA EA EA EA ;........
EA48 .byte EA EA EA EA EA EA EA EA ;........
EA50 .byte EA EA EA EA EA EA EA EA ;........
EA58 .byte EA EA EA EA EA EA EA EA ;........
EA60 sEA60 .byte EA EA EA EA EA EA EA EA ;........
EA68 .byte EA EA EA EA EA EA EA EA ;........
EA70 .byte EA EA EA EA EA EA EA EA ;........
EA78 .byte EA EA EA EA EA EA EA EA ;........
EA80 .byte EA EA EA EA EA EA EA EA ;........
EA88 .byte EA EA EA EA EA EA EA EA ;........
EA90 .byte EA EA EA EA EA EA EA EA ;........
EA98 .byte EA EA EA EA EA EA EA EA ;........
EAA0 .byte EA EA EA EA EA EA EA EA ;........
EAA8 .byte EA EA EA EA EA EA EA EA ;........
EAB0 .byte EA EA EA EA EA EA EA EA ;........
EAB8 .byte EA EA EA EA EA EA EA EA ;........
EAC0 .byte EA EA EA EA EA EA EA EA ;........
EAC8 .byte EA EA EA EA EA EA EA EA ;........
EAD0 .byte EA EA EA EA EA EA EA EA ;........
EAD8 .byte EA EA EA EA EA EA EA EA ;........
EAE0 .byte EA EA EA EA EA EA EA EA ;........
EAE8 .byte EA EA EA EA EA EA EA EA ;........
EAF0 .byte EA EA EA EA EA EA EA EA ;........
EAF8 .byte EA EA EA EA EA EA EA EA ;........
EB00 .byte EB EB EB EB EB EB EB EB ;........
EB08 .byte EB EB EB EB EB EB EB EB ;........
EB10 .byte EB EB EB EB EB EB EB EB ;........
EB18 .byte EB EB EB EB EB EB EB EB ;........
EB20 .byte EB EB EB EB EB EB EB EB ;........
EB28 .byte EB EB EB EB EB EB EB EB ;........
EB30 .byte EB EB EB EB EB EB EB EB ;........
EB38 .byte EB EB EB EB EB EB EB EB ;........
EB40 .byte EB EB EB EB EB EB EB EB ;........
EB48 .byte EB EB EB EB EB EB EB EB ;........
EB50 .byte EB EB EB EB EB EB EB EB ;........
EB58 .byte EB EB EB EB EB EB EB EB ;........
EB60 .byte EB EB EB EB EB EB EB EB ;........
EB68 .byte EB EB EB EB EB EB EB EB ;........
EB70 .byte EB EB EB EB EB EB EB EB ;........
EB78 .byte EB EB EB EB EB EB EB EB ;........
EB80 .byte EB EB EB EB EB EB EB EB ;........
EB88 .byte EB EB EB EB EB EB EB EB ;........
EB90 .byte EB EB EB EB EB EB EB EB ;........
EB98 .byte EB EB EB EB EB EB EB EB ;........
EBA0 .byte EB EB EB EB EB EB EB EB ;........
EBA8 .byte EB EB EB EB EB EB EB EB ;........
EBB0 .byte EB EB EB EB EB EB EB EB ;........
EBB8 .byte EB EB EB EB EB EB EB EB ;........
EBC0 .byte EB EB EB EB EB EB EB EB ;........
EBC8 .byte EB EB EB EB EB EB EB EB ;........
EBD0 .byte EB EB EB EB EB EB EB EB ;........
EBD8 .byte EB EB EB EB EB EB EB EB ;........
EBE0 .byte EB EB EB EB EB EB EB EB ;........
EBE8 .byte EB EB EB EB EB EB EB EB ;........
EBF0 .byte EB EB EB EB EB EB EB EB ;........
EBF8 .byte EB EB EB EB EB EB EB EB ;........
EC00 .byte EC EC EC EC EC EC EC EC ;........
EC08 .byte EC EC EC EC EC EC EC EC ;........
EC10 .byte EC EC EC EC EC EC EC EC ;........
EC18 .byte EC EC EC EC EC EC EC EC ;........
EC20 .byte EC EC EC EC EC EC EC EC ;........
EC28 .byte EC EC EC EC EC EC EC EC ;........
EC30 .byte EC EC EC EC EC EC EC EC ;........
EC38 .byte EC EC EC EC EC EC EC EC ;........
EC40 .byte EC EC EC EC EC EC EC EC ;........
EC48 .byte EC EC EC EC EC EC EC EC ;........
EC50 .byte EC EC EC EC EC EC EC EC ;........
EC58 .byte EC EC EC EC EC EC EC EC ;........
EC60 .byte EC EC EC EC EC EC EC EC ;........
EC68 .byte EC EC EC EC EC EC EC EC ;........
EC70 .byte EC EC EC EC EC EC EC EC ;........
EC78 .byte EC EC EC EC EC EC EC EC ;........
EC80 .byte EC EC EC EC EC EC EC EC ;........
EC88 .byte EC EC EC EC EC EC EC EC ;........
EC90 .byte EC EC EC EC EC EC EC EC ;........
EC98 .byte EC EC EC EC EC EC EC EC ;........
ECA0 .byte EC EC EC EC EC EC EC EC ;........
ECA8 .byte EC EC EC EC EC EC EC EC ;........
ECB0 .byte EC EC EC EC EC EC EC EC ;........
ECB8 .byte EC EC EC EC EC EC EC EC ;........
ECC0 .byte EC EC EC EC EC EC EC EC ;........
ECC8 .byte EC EC EC EC EC EC EC EC ;........
ECD0 .byte EC EC EC EC EC EC EC EC ;........
ECD8 .byte EC EC EC EC EC EC EC EC ;........
ECE0 .byte EC EC EC EC EC EC EC EC ;........
ECE8 .byte EC EC EC EC EC EC EC EC ;........
ECF0 .byte EC EC EC EC EC EC EC EC ;........
ECF8 .byte EC EC EC EC EC EC EC EC ;........
ED00 .byte ED ED ED ED ED ED ED ED ;........
ED08 .byte ED ED ED ED ED ED ED ED ;........
ED10 .byte ED ED ED ED ED ED ED ED ;........
ED18 .byte ED ED ED ED ED ED ED ED ;........
ED20 .byte ED ED ED ED ED ED ED ED ;........
ED28 .byte ED ED ED ED ED ED ED ED ;........
ED30 .byte ED ED ED ED ED ED ED ED ;........
ED38 .byte ED ED ED ED ED ED ED ED ;........
ED40 .byte ED ED ED ED ED ED ED ED ;........
ED48 .byte ED ED ED ED ED ED ED ED ;........
ED50 .byte ED ED ED ED ED ED ED ED ;........
ED58 .byte ED ED ED ED ED ED ED ED ;........
ED60 .byte ED ED ED ED ED ED ED ED ;........
ED68 .byte ED ED ED ED ED ED ED ED ;........
ED70 .byte ED ED ED ED ED ED ED ED ;........
ED78 .byte ED ED ED ED ED ED ED ED ;........
ED80 .byte ED ED ED ED ED ED ED ED ;........
ED88 .byte ED ED ED ED ED ED ED ED ;........
ED90 .byte ED ED ED ED ED ED ED ED ;........
ED98 .byte ED ED ED ED ED ED ED ED ;........
EDA0 .byte ED ED ED ED ED ED ED ED ;........
EDA8 .byte ED ED ED ED ED ED ED ED ;........
EDB0 .byte ED ED ED ED ED ED ED ED ;........
EDB8 .byte ED ED ED ED ED ED ED ED ;........
EDC0 .byte ED ED ED ED ED ED ED ED ;........
EDC8 .byte ED ED ED ED ED ED ED ED ;........
EDD0 .byte ED ED ED ED ED ED ED ED ;........
EDD8 .byte ED ED ED ED ED ED ED ED ;........
EDE0 .byte ED ED ED ED ED ED ED ED ;........
EDE8 .byte ED ED ED ED ED ED ED ED ;........
EDF0 .byte ED ED ED ED ED ED ED ED ;........
EDF8 .byte ED ED ED ED ED ED ED ED ;........
EE00 .byte EE EE EE EE EE EE EE EE ;........
EE08 .byte EE EE EE EE EE EE EE EE ;........
EE10 .byte EE EE EE EE EE EE EE EE ;........
EE18 .byte EE EE EE EE EE EE EE EE ;........
EE20 .byte EE EE EE EE EE EE EE EE ;........
EE28 .byte EE EE EE EE EE EE EE EE ;........
EE30 .byte EE EE EE EE EE EE EE EE ;........
EE38 .byte EE EE EE EE EE EE EE EE ;........
EE40 .byte EE EE EE EE EE EE EE EE ;........
EE48 .byte EE EE EE EE EE EE EE EE ;........
EE50 .byte EE EE EE EE EE EE EE EE ;........
EE58 .byte EE EE EE EE EE EE EE EE ;........
EE60 .byte EE EE EE EE EE EE EE EE ;........
EE68 .byte EE EE EE EE EE EE EE EE ;........
EE70 .byte EE EE EE EE EE EE EE EE ;........
EE78 .byte EE EE EE EE EE EE EE EE ;........
EE80 .byte EE EE EE EE EE EE EE EE ;........
EE88 .byte EE EE EE EE EE EE EE EE ;........
EE90 .byte EE EE EE EE EE EE EE EE ;........
EE98 .byte EE EE EE EE EE EE EE EE ;........
EEA0 .byte EE EE EE EE EE EE EE EE ;........
EEA8 .byte EE EE EE EE EE EE EE EE ;........
EEB0 .byte EE EE EE EE EE EE EE EE ;........
EEB8 .byte EE EE EE EE EE EE EE EE ;........
EEC0 .byte EE EE EE EE EE EE EE EE ;........
EEC8 .byte EE EE EE EE EE EE EE EE ;........
EED0 .byte EE EE EE EE EE EE EE EE ;........
EED8 .byte EE EE EE EE EE EE EE EE ;........
EEE0 .byte EE EE EE EE EE EE EE EE ;........
EEE8 .byte EE EE EE EE EE EE EE EE ;........
EEF0 .byte EE EE EE EE EE EE EE EE ;........
EEF8 .byte EE EE EE EE EE EE EE EE ;........
EF00 .byte EF EF EF EF EF EF EF EF ;........
EF08 .byte EF EF EF EF EF EF EF EF ;........
EF10 .byte EF EF EF EF EF EF EF EF ;........
EF18 .byte EF EF EF EF EF EF EF EF ;........
EF20 .byte EF EF EF EF EF EF EF EF ;........
EF28 .byte EF EF EF EF EF EF EF EF ;........
EF30 .byte EF EF EF EF EF EF EF EF ;........
EF38 .byte EF EF EF EF EF EF EF EF ;........
EF40 .byte EF EF EF EF EF EF EF EF ;........
EF48 .byte EF EF EF EF EF EF EF EF ;........
EF50 .byte EF EF EF EF EF EF EF EF ;........
EF58 .byte EF EF EF EF EF EF EF EF ;........
EF60 .byte EF EF EF EF EF EF EF EF ;........
EF68 .byte EF EF EF EF EF EF EF EF ;........
EF70 .byte EF EF EF EF EF EF EF EF ;........
EF78 .byte EF EF EF EF EF EF EF EF ;........
EF80 .byte EF EF EF EF EF EF EF EF ;........
EF88 .byte EF EF EF EF EF EF EF EF ;........
EF90 .byte EF EF EF EF EF EF EF EF ;........
EF98 .byte EF EF EF EF EF EF EF EF ;........
EFA0 .byte EF EF EF EF EF EF EF EF ;........
EFA8 .byte EF EF EF EF EF EF EF EF ;........
EFB0 .byte EF EF EF EF EF EF EF EF ;........
EFB8 .byte EF EF EF EF EF EF EF EF ;........
EFC0 .byte EF EF EF EF EF EF EF EF ;........
EFC8 .byte EF EF EF EF EF EF EF EF ;........
EFD0 .byte EF EF EF EF EF EF EF EF ;........
EFD8 .byte EF EF EF EF EF EF EF EF ;........
EFE0 .byte EF EF EF EF EF EF EF EF ;........
EFE8 .byte EF EF EF EF EF EF EF EF ;........
EFF0 .byte EF EF EF EF EF EF EF EF ;........
EFF8 .byte EF EF EF EF EF EF EF EF ;........
; - Table of Kernal I/O Messages DATA
; Addr ErrNr Message
;
; F000 00 'too many files'
; F00E 0e 'file open'
; F018 18 'file not open '
; F024 24 'file not found'
; F032 32 '<cr>searching.'
; F03D 3d 'for.'
; F041 41 '<cr>press play.'
; F04D 4d '& record.'
; F056 56 'on tape .'
; F05F 5f '<cr>load'
; F064 64 '<cr>writing.'
; F06D 6d '<cr>verify'
; F074 74 'device not present'
; F086 86 'not input file'
; F094 94 'not output file'
; F0A3 a3 '<cr>found.'
; F0AA aa '<cr>ok<cr>'
; F0AE ae '<cr>ready.<cr>'
; F0B6 b6 '<cr>are you sure ?'
; F0C5 c5 '<cr>? bad disk <cr>'
;
F000 sF000 .byte 54 4F 4F 20 4D 41 4E 59 ;too many
F008 .byte 20 46 49 4C 45 D3 46 49 ; fileSfi
F010 .byte 4C 45 20 4F 50 45 CE 46 ;le opeNf
F018 .byte 49 4C 45 20 4E 4F 54 20 ;ile not
F020 .byte 4F 50 45 CE 46 49 4C 45 ;opeNfile
F028 .byte 20 4E 4F 54 20 46 4F 55 ; not fou
F030 .byte 4E C4 0D 53 45 41 52 43 ;nD.searc
F038 .byte 48 49 4E 47 A0 46 4F 52 ;hing.for
F040 .byte A0 0D 50 52 45 53 53 20 ;..press
F048 .byte 50 4C 41 59 A0 26 20 52 ;play.& r
F050 .byte 45 43 4F 52 44 A0 4F 4E ;ecord.on
F058 .byte 20 54 41 50 45 20 A3 0D ; tape ..
F060 .byte 4C 4F 41 C4 0D 57 52 49 ;loaD.wri
F068 .byte 54 49 4E 47 A0 0D 56 45 ;ting..ve
F070 .byte 52 49 46 D9 44 45 56 49 ;rifYdevi
F078 .byte 43 45 20 4E 4F 54 20 50 ;ce not p
F080 .byte 52 45 53 45 4E D4 4E 4F ;resenTno
F088 .byte 54 20 49 4E 50 55 54 20 ;t input
F090 .byte 46 49 4C C5 4E 4F 54 20 ;filEnot
F098 .byte 4F 55 54 50 55 54 20 46 ;output f
F0A0 .byte 49 4C C5 0D 46 4F 55 4E ;ilE.foun
F0A8 .byte 44 A0 0D 4F 4B 8D 0D 52 ;d..ok..r
F0B0 .byte 45 41 44 59 2E 8D 0D 41 ;eady...a
F0B8 .byte 52 45 20 59 4F 55 20 53 ;re you s
F0C0 .byte 55 52 45 20 BF 0D 3F 20 ;ure ..?
F0C8 .byte 42 41 44 20 44 49 53 4B ;bad disk
F0D0 .byte 20 8D ; .
; talk Send TALK Command on IEEE Bus
F0D2 iF0D2 LDA #$40
F0D4 BIT $20A9
; *** Resyncing ***
; listn Send LISTEN Command on IEEE Bus
F0D5 iF0D5 LDA #$20
F0D7 iF0D7 PHA
F0D8 LDA $E840 ; VIA CHIP
F0DB ORA #$02
F0DD STA $E840 ; VIA CHIP
F0E0 LDA #$3C
F0E2 STA $E821
F0E5 BIT $A0
F0E7 BEQ $F0FA
F0E9 LDA #$34
F0EB STA $E811
F0EE JSR $F109 ; - Send Data On IEEE Bus
F0F1 LDA #$00
F0F3 STA $A0 ; Flag: IEEE Bus-Output Char. Buffered
F0F5 LDA #$3C
F0F7 STA $E811
F0FA iF0FA PLA
F0FB ORA $D4 ; Current Device Number
F0FD STA $A5 ; Buffered Character for IEEE Bus
F0FF iF0FF LDA $E840 ; VIA CHIP
F102 BPL $F0FF
F104 AND #$FB
F106 STA $E840 ; VIA CHIP
; - Send Data On IEEE Bus
; - Flag Errors
F109 iF109 LDA #$3C
F10B STA $E823
F10E LDA $E840 ; VIA CHIP
F111 AND #$41
F113 CMP #$41
F115 BEQ $F16C ; - Status #80 - device not present
F117 LDA $A5 ; Buffered Character for IEEE Bus
F119 EOR #$FF
F11B STA $E822
F11E iF11E BIT $E840
F121 BVC $F11E
F123 LDA #$34
F125 STA $E823
F128 iF128 LDA #$FF
F12A STA $E845
F12D iF12D LDA $E840 ; VIA CHIP
F130 BIT $E84D
F133 BVS $F151
F135 LSR
F136 BCC $F12D
F138 iF138 LDA #$3C
F13A STA $E823
F13D LDA #$FF
F13F STA $E822
F142 RTS
F143 iF143 STA $A5 ; Buffered Character for IEEE Bus
F145 JSR $F109 ; - Send Data On IEEE Bus
F148 iF148 LDA $E840 ; VIA CHIP
F14B ORA #$04
F14D STA $E840 ; VIA CHIP
F150 RTS
F151 iF151 LDA $03FC ; 4: Flag: Kernal Variable for IEEE Timeout
F154 BPL $F165 ; - Status #01 - ??
F156 JSR $F343 ; stop Check STOP Key
F159 BNE $F128
F15B iF15B LDA $03FC ; 4: Flag: Kernal Variable for IEEE Timeout
F15E BPL $F170 ; - Status #02 - read timeout
F160 JSR $F343 ; stop Check STOP Key
F163 BNE $F1CD
; - Status #01 - ??
F165 iF165 LDA #$01
F167 iF167 JSR $FBC4 ; - Set Status Bit
F16A BNE $F138
; - Status #80 - device not present
F16C iF16C LDA #$80
F16E BMI $F167
; - Status #02 - read timeout
F170 iF170 LDA #$02
F172 JSR $FBC4 ; - Set Status Bit
F175 iF175 LDA $E840 ; VIA CHIP
F178 AND #$FD
F17A STA $E840 ; VIA CHIP
F17D LDA #$34
F17F STA $E821
F182 LDA #$0D
F184 RTS
; - Print Message
F185 iF185 LDA $F000,Y ; - Table of Kernal I/O Messages DATA
F188 PHP
F189 AND #$7F
F18B JSR $E202 ; - Output to Screen
F18E INY
F18F PLP
F190 BPL $F185 ; - Print Message
F192 RTS
F193 iF193 STA $A5 ; Buffered Character for IEEE Bus
F195 JSR $F109 ; - Send Data On IEEE Bus
F198 iF198 JSR $F175
F19B JMP $F148
F19E iF19E BIT $A0
F1A0 BMI $F1A6
F1A2 DEC $A0 ; Flag: IEEE Bus-Output Char. Buffered
F1A4 BNE $F1AB
F1A6 iF1A6 PHA
F1A7 JSR $F109 ; - Send Data On IEEE Bus
F1AA PLA
F1AB iF1AB STA $A5 ; Buffered Character for IEEE Bus
F1AD RTS
; untlk Send UNTALK
F1AE iF1AE LDA $E840 ; VIA CHIP
F1B1 AND #$FB
F1B3 STA $E840 ; VIA CHIP
F1B6 LDA #$5F
F1B8 BIT $3FA9
; *** Resyncing ***
; untlk Send UNLISTEN
F1B9 iF1B9 LDA #$3F
F1BB JSR $F0D7
F1BE BNE $F148
F1C0 iF1C0 LDA #$34
F1C2 STA $E821
F1C5 LDA $E840 ; VIA CHIP
F1C8 ORA #$02
F1CA STA $E840 ; VIA CHIP
F1CD iF1CD LDA #$FF
F1CF STA $E845
F1D2 iF1D2 BIT $E84D
F1D5 BVS $F15B
F1D7 BIT $E840
F1DA BMI $F1D2
F1DC LDA $E840 ; VIA CHIP
F1DF AND #$FD
F1E1 STA $E840 ; VIA CHIP
F1E4 BIT $E810
F1E7 BVS $F1EE
F1E9 LDA #$40
F1EB JSR $FBC4 ; - Set Status Bit
F1EE iF1EE LDA $E820 ; PIA 2 CHIP
F1F1 EOR #$FF
F1F3 PHA
F1F4 LDA #$3C
F1F6 STA $E821
F1F9 iF1F9 BIT $E840
F1FC BPL $F1F9
F1FE LDA #$34
F200 STA $E821
F203 PLA
F204 RTS
; - Input From Screen or Keyboard
F205 iF205 LDA #$00
F207 STA $96 ; Kernal I/O Status Word: ST
F209 LDA $AF ; Default Input Device (0)
F20B BNE $F224
F20D LDA $9E ; No. of Chars. in Keyboard Buffer (Queue)
F20F BEQ $F262
F211 SEI
F212 JMP $E0A7 ; lp2 Get Character From Keyboard Buffer
; chrin Input a byte
F215 iF215 LDA $AF ; Default Input Device (0)
F217 BNE $F224
F219 LDA $C6 ; Cursor Column on Current Line
F21B STA $A4
F21D LDA $D8 ; Current Cursor Physical Line Number
F21F STA $A3 ; Cursor Y-X Pos. at Start of INPUT
F221 JMP $E116 ; Input From Screen or Keyboard
F224 iF224 CMP #$03
F226 BNE $F231 ; - Get From Tape / IEEE
F228 STA $AC ; Flag: INPUT or GET from Keyboard
F22A LDA $D5 ; Physical Screen Line Length
F22C STA $A1 ; Pointer: End of Logical Line for INPUT
F22E JMP $E116 ; Input From Screen or Keyboard
; - Get From Tape / IEEE
F231 iF231 BCS $F25C
F233 STX $AD ; X save in tape handling (saves cassette #)
F235 JSR $F249
F238 PHA
F239 JSR $F249
F23C BNE $F243
F23E LDA #$40
F240 JSR $FBC4 ; - Set Status Bit
F243 iF243 DEC $BA,X
F245 LDX $AD ; X save in tape handling (saves cassette #)
F247 PLA
F248 RTS
F249 iF249 JSR $F84B ; - Bump Tape Pointer
F24C BNE $F259
F24E JSR $F89A ; - Initiate Tape Read
F251 LDX $D4 ; Current Device Number
F253 LDA #$00
F255 STA $BA,X
F257 BEQ $F249
F259 iF259 LDA ($D6),Y ; Pointer: Start of Tape Buffer
F25B RTS
F25C iF25C LDA $96 ; Kernal I/O Status Word: ST
F25E BEQ $F263
F260 LDA #$0D
F262 iF262 RTS
F263 iF263 JMP $F1C0
; chrout Output One Character
F266 iF266 PHA
F267 LDA $B0 ; Default Output (CMD) Device (3)
F269 CMP #$03
F26B BNE $F271
F26D PLA
F26E JMP $E202 ; - Output to Screen
F271 iF271 BMI $F277
F273 PLA
F274 JMP $F19E
F277 iF277 PLA
F278 iF278 STA $B4
F27A CMP #$0A
F27C BEQ $F262
F27E PHA
F27F TXA
F280 PHA
F281 TYA
F282 PHA
F283 JSR $F84B ; - Bump Tape Pointer
F286 BNE $F298
F288 JSR $F8CB ; - Initiate Tape Write
F28B LDX $D4 ; Current Device Number
F28D LDA #$01
F28F STA $BA,X
F291 LDY #$00
F293 LDA #$02
F295 STA ($D6),Y ; Pointer: Start of Tape Buffer
F297 INY
F298 iF298 LDA $B4
F29A STA ($D6),Y ; Pointer: Start of Tape Buffer
F29C iF29C PLA
F29D TAY
F29E PLA
F29F TAX
F2A0 PLA
F2A1 RTS
; clall Abort All Files
F2A2 iF2A2 LDA #$00
F2A4 STA $AE ; No. of Open Files / Index to File Table
; clrchn Restore Default I/O
F2A6 iF2A6 LDA $B0 ; Default Output (CMD) Device (3)
F2A8 CMP #$04
F2AA BCC $F2AF
F2AC JSR $F1B9 ; untlk Send UNLISTEN
F2AF iF2AF LDA $AF ; Default Input Device (0)
F2B1 CMP #$04
F2B3 BCC $F2B8
F2B5 JSR $F1AE ; untlk Send UNTALK
F2B8 iF2B8 LDA #$03
F2BA STA $B0 ; Default Output (CMD) Device (3)
F2BC LDA #$00
F2BE STA $AF ; Default Input Device (0)
F2C0 RTS
F2C1 iF2C1 LDX $AE ; No. of Open Files / Index to File Table
F2C3 iF2C3 DEX
F2C4 BMI $F2DC
F2C6 CMP $0251,X ; KERNAL Table: Active Logical File No's.
F2C9 BEQ $F2DC
F2CB BNE $F2C3
F2CD iF2CD LDA $0251,X ; KERNAL Table: Active Logical File No's.
F2D0 STA $D2 ; Current Logical File Number
F2D2 LDA $025B,X ; KERNAL Table: Device No. for Each File
F2D5 STA $D4 ; Current Device Number
F2D7 LDA $0265,X ; KERNAL Table: Second Address Each File
F2DA STA $D3 ; Current Secondary Address
F2DC iF2DC RTS
; closet Perform [close]
F2DD iF2DD JSR $F50D
F2E0 LDA $D2 ; Current Logical File Number
F2E2 iF2E2 JSR $F2C1
F2E5 BNE $F334
F2E7 iF2E7 JSR $F2CD
F2EA TXA
F2EB PHA
F2EC LDA $D4 ; Current Device Number
F2EE BEQ $F318
F2F0 CMP #$03
F2F2 BEQ $F318
F2F4 BCS $F315
F2F6 LDA $D3 ; Current Secondary Address
F2F8 AND #$0F
F2FA BEQ $F318
F2FC JSR $F695 ; - Get Buffer Address
F2FF LDA #$00
F301 JSR $F278
F304 JSR $F8CB ; - Initiate Tape Write
F307 LDA $D3 ; Current Secondary Address
F309 CMP #$62
F30B BNE $F318
F30D LDA #$05
F30F JSR $F619
F312 JMP $F318
F315 iF315 JSR $F72F
F318 iF318 PLA
F319 TAX
F31A DEC $AE ; No. of Open Files / Index to File Table
F31C CPX $AE ; No. of Open Files / Index to File Table
F31E BEQ $F334
F320 LDY $AE ; No. of Open Files / Index to File Table
F322 LDA $0251,Y ; KERNAL Table: Active Logical File No's.
F325 STA $0251,X ; KERNAL Table: Active Logical File No's.
F328 LDA $025B,Y ; KERNAL Table: Device No. for Each File
F32B STA $025B,X ; KERNAL Table: Device No. for Each File
F32E LDA $0265,Y ; KERNAL Table: Second Address Each File
F331 STA $0265,X ; KERNAL Table: Second Address Each File
F334 iF334 RTS
; - -stop-
F335 iF335 LDA $9B ; Flag: STOP key / RVS key
F337 CMP #$EF
F339 BNE $F342
F33B PHP
F33C JSR $F2A6 ; clrchn Restore Default I/O
F33F STA $9E ; No. of Chars. in Keyboard Buffer (Queue)
F341 PLP
F342 iF342 RTS
; stop Check STOP Key
F343 iF343 JSR $F335 ; - -stop-
F346 JMP $B7C6 ; stop Perform [stop], [end], break
; - Print Message if Direct
F349 iF349 JSR $F351 ; Check Direct
F34C BNE $F342
F34E JMP $F185 ; - Print Message
; Check Direct
F351 iF351 LDA $78
F353 CMP #$02
F355 RTS
F356 iF356 LDA $D4 ; Current Device Number
F358 BNE $F35D
F35A iF35A JMP $BF00 ; synerr Output ?SYNTAX Error
F35D iF35D CMP #$03
F35F BEQ $F35A
F361 BCC $F3D4
F363 LDA #$60
F365 STA $D3 ; Current Secondary Address
F367 LDY $D1 ; Length of Current File Name
F369 BNE $F36E
F36B JMP $BF00 ; synerr Output ?SYNTAX Error
F36E iF36E JSR $F449
F371 JSR $F4A5
F374 JSR $F0D2 ; talk Send TALK Command on IEEE Bus
F377 LDA $D3 ; Current Secondary Address
F379 JSR $F193
F37C JSR $F1C0
F37F STA $FB ; I/O Start Address
F381 LDA $96 ; Kernal I/O Status Word: ST
F383 LSR
F384 LSR
F385 BCS $F3C1
F387 JSR $F1C0
F38A STA $FC
F38C JSR $F46D
F38F iF38F LDA #$FD
F391 AND $96 ; Kernal I/O Status Word: ST
F393 STA $96 ; Kernal I/O Status Word: ST
F395 JSR $F343 ; stop Check STOP Key
F398 JSR $F1C0
F39B TAX
F39C LDA $96 ; Kernal I/O Status Word: ST
F39E LSR
F39F LSR
F3A0 BCS $F38F
F3A2 TXA
F3A3 LDY $9D ; Flag: 0 = Load, 1 = Verify (Kernel)
F3A5 BEQ $F3B3
F3A7 DEY
F3A8 CMP ($FB),Y ; I/O Start Address
F3AA BEQ $F3B5
F3AC LDA #$10
F3AE ORA $96 ; Kernal I/O Status Word: ST
F3B0 STA $96 ; Kernal I/O Status Word: ST
F3B2 BIT $FB91
; *** F3B2: ADDRESS DIFFER. This may indicate misassembly ***
F3B5 iF3B5 INC $FB ; I/O Start Address
F3B7 BNE $F3BB
F3B9 INC $FC
F3BB iF3BB BIT $96
F3BD BVS $F3C6
F3BF BVC $F38F
F3C1 iF3C1 LDY #$24
F3C3 JMP $F5AF
F3C6 iF3C6 LDA $FB ; I/O Start Address
F3C8 STA $C9 ; Tape End Addresses/End of Program
F3CA LDA $FC
F3CC STA $CA
F3CE JSR $F1AE ; untlk Send UNTALK
F3D1 JMP $F72F
F3D4 iF3D4 JSR $F695 ; - Get Buffer Address
F3D7 JSR $F857 ; - Print "PRESS PLAY ON TAPE"
F3DA JSR $F449
F3DD iF3DD LDA $D1 ; Length of Current File Name
F3DF BEQ $F3E9
F3E1 JSR $F4D3
F3E4 BNE $F3EE
F3E6 iF3E6 JMP $F5AD
F3E9 iF3E9 JSR $F5E5
F3EC BEQ $F3E6
F3EE iF3EE CPX #$01
F3F0 BNE $F3DD
F3F2 LDA $96 ; Kernal I/O Status Word: ST
F3F4 AND #$10
F3F6 BNE $F46C
F3F8 JSR $F67B
F3FB JSR $F46D
F3FE JMP $F8A3
; verfyt Perform [load]
F401 iF401 LDA #$00
F403 STA $9D ; Flag: 0 = Load, 1 = Verify (Kernel)
F405 iF405 JSR $F47D ; slpara Get Parameters For LOAD/SAVE
F408 iF408 JSR $F6CC ; ?
F40B LDA #$FF
F40D iF40D CMP $9B ; Flag: STOP key / RVS key
F40F BNE $F40D
F411 CMP $9B ; Flag: STOP key / RVS key
F413 BNE $F40D
F415 JSR $F356
F418 LDA $9D ; Flag: 0 = Load, 1 = Verify (Kernel)
F41A BNE $F46C
F41C JSR $F92B ; ?
F41F LDA $96 ; Kernal I/O Status Word: ST
F421 AND #$10
F423 BEQ $F42E
F425 LDY #$00
F427 STY $9E ; No. of Chars. in Keyboard Buffer (Queue)
F429 LDY #$60
F42B JMP $F5AF
F42E iF42E LDY #$AE
F430 JSR $F349 ; - Print Message if Direct
F433 JSR $F351 ; Check Direct
F436 BNE $F443
F438 LDA $CA
F43A STA $2B
F43C LDA $C9 ; Tape End Addresses/End of Program
F43E STA $2A ; Pointer: Start of BASIC Variables
F440 JMP $B4AD
F443 iF443 JSR $B622 ; stxpt Reset TXTPTR
F446 JMP $B60B
F449 iF449 JSR $F351 ; Check Direct
F44C BNE $F46C
F44E LDY #$32
F450 JSR $F185 ; - Print Message
F453 LDA $D1 ; Length of Current File Name
F455 BEQ $F46C
F457 LDY #$3D
F459 JSR $F185 ; - Print Message
F45C iF45C LDY $D1 ; Length of Current File Name
F45E BEQ $F46C
F460 LDY #$00
F462 iF462 LDA ($DA),Y ; Pointer: Current File Name
F464 JSR $F266 ; chrout Output One Character
F467 INY
F468 CPY $D1 ; Length of Current File Name
F46A BNE $F462
F46C iF46C RTS
F46D iF46D LDY #$5F
F46F LDA $9D ; Flag: 0 = Load, 1 = Verify (Kernel)
F471 BEQ $F475
F473 LDY #$6D
F475 iF475 JSR $F349 ; - Print Message if Direct
F478 LDY #$39
F47A JMP $F349 ; - Print Message if Direct
; slpara Get Parameters For LOAD/SAVE
F47D iF47D LDX #$00
F47F STX $96 ; Kernal I/O Status Word: ST
F481 STX $D1 ; Length of Current File Name
F483 STX $D3 ; Current Secondary Address
F485 INX
F486 STX $D4 ; Current Device Number
F488 JSR $F54D ; ?
F48B JSR $F53C
F48E JSR $F54D ; ?
F491 JSR $F49F ; combyt Get Next One Byte Parameter
F494 STX $D4 ; Current Device Number
F496 JSR $F54D ; ?
F499 JSR $F49F ; combyt Get Next One Byte Parameter
F49C STX $D3 ; Current Secondary Address
F49E iF49E RTS
; combyt Get Next One Byte Parameter
F49F iF49F JSR $F555 ; cmmerr Check For Comma
F4A2 JMP $C8D4 ; -Eval Byte Parameter
F4A5 iF4A5 LDA $D3 ; Current Secondary Address
F4A7 BMI $F49E
F4A9 LDY $D1 ; Length of Current File Name
F4AB BEQ $F49E
F4AD JSR $F0D5 ; listn Send LISTEN Command on IEEE Bus
F4B0 LDA $D3 ; Current Secondary Address
F4B2 ORA #$F0
F4B4 iF4B4 JSR $F143
F4B7 LDA $96 ; Kernal I/O Status Word: ST
F4B9 BPL $F4C0
F4BB iF4BB LDY #$74
F4BD JMP $F5AF
F4C0 iF4C0 LDA $D1 ; Length of Current File Name
F4C2 BEQ $F4D0
F4C4 LDY #$00
F4C6 iF4C6 LDA ($DA),Y ; Pointer: Current File Name
F4C8 JSR $F19E
F4CB INY
F4CC CPY $D1 ; Length of Current File Name
F4CE BNE $F4C6
F4D0 iF4D0 JMP $F1B9 ; untlk Send UNLISTEN
F4D3 iF4D3 JSR $F5E5
F4D6 BEQ $F4F5
F4D8 LDY #$05
F4DA STY $B5
F4DC LDY #$00
F4DE STY $B4
F4E0 iF4E0 CPY $D1 ; Length of Current File Name
F4E2 BEQ $F4F4
F4E4 LDA ($DA),Y ; Pointer: Current File Name
F4E6 LDY $B5
F4E8 CMP ($D6),Y ; Pointer: Start of Tape Buffer
F4EA BNE $F4D3
F4EC INC $B4
F4EE INC $B5
F4F0 LDY $B4
F4F2 BNE $F4E0
F4F4 iF4F4 TYA
F4F5 iF4F5 RTS
; verfyt Perform [verify]
F4F6 iF4F6 LDA #$01
F4F8 STA $9D ; Flag: 0 = Load, 1 = Verify (Kernel)
F4FA JSR $F405
F4FD LDA $96 ; Kernal I/O Status Word: ST
F4FF AND #$10
F501 BEQ $F508
F503 LDY #$6E
F505 JMP $F5AF
F508 iF508 LDY #$AA
F50A JMP $F185 ; - Print Message
F50D iF50D LDX #$00
F50F STX $D3 ; Current Secondary Address
F511 STX $96 ; Kernal I/O Status Word: ST
F513 STX $D1 ; Length of Current File Name
F515 INX
F516 STX $D4 ; Current Device Number
F518 JSR $F558
F51B JSR $C8D4 ; -Eval Byte Parameter
F51E STX $D2 ; Current Logical File Number
F520 JSR $F54D ; ?
F523 JSR $F49F ; combyt Get Next One Byte Parameter
F526 STX $D4 ; Current Device Number
F528 CPX #$03
F52A BCC $F52E
F52C DEC $D3 ; Current Secondary Address
F52E iF52E JSR $F54D ; ?
F531 JSR $F49F ; combyt Get Next One Byte Parameter
F534 STX $D3 ; Current Secondary Address
F536 JSR $F54D ; ?
F539 JSR $F555 ; cmmerr Check For Comma
F53C iF53C JSR $BD98 ; frmevl Evaluate Expression in Text
F53F JSR $C7B5 ; frestr Perform String Housekeeping
F542 STA $D1 ; Length of Current File Name
F544 LDA $1F ; Utility Pointer Area
F546 STA $DA ; Pointer: Current File Name
F548 LDA $20
F54A STA $DB
F54C RTS
; ?
F54D iF54D JSR $0076 ; Entry to Get Same Byte of Text Again
F550 BNE $F554
F552 PLA
F553 PLA
F554 iF554 RTS
; cmmerr Check For Comma
F555 iF555 JSR $BEF5 ; -Test comma-
F558 iF558 JSR $0076 ; Entry to Get Same Byte of Text Again
F55B BNE $F554
F55D iF55D JMP $BF00 ; synerr Output ?SYNTAX Error
; opent Perform [open]
F560 iF560 JSR $F50D
F563 iF563 LDA $D2 ; Current Logical File Number
F565 iF565 BEQ $F55D
F567 LDY #$0E
F569 JSR $F2C1
F56C BEQ $F5AF
F56E LDX $AE ; No. of Open Files / Index to File Table
F570 LDY #$00
F572 STY $96 ; Kernal I/O Status Word: ST
F574 CPX #$0A
F576 BEQ $F5AF
F578 INC $AE ; No. of Open Files / Index to File Table
F57A LDA $D2 ; Current Logical File Number
F57C STA $0251,X ; KERNAL Table: Active Logical File No's.
F57F LDA $D3 ; Current Secondary Address
F581 ORA #$60
F583 STA $D3 ; Current Secondary Address
F585 STA $0265,X ; KERNAL Table: Second Address Each File
F588 LDA $D4 ; Current Device Number
F58A STA $025B,X ; KERNAL Table: Device No. for Each File
F58D BEQ $F5E4
F58F CMP #$03
F591 BEQ $F5E4
F593 BCC $F598
F595 JMP $F4A5
F598 iF598 LDA $D3 ; Current Secondary Address
F59A AND #$0F
F59C BNE $F5C9
F59E JSR $F857 ; - Print "PRESS PLAY ON TAPE"
F5A1 JSR $F449
F5A4 LDA $D1 ; Length of Current File Name
F5A6 BEQ $F5C2
F5A8 JSR $F4D3
F5AB BNE $F5D1
F5AD iF5AD LDY #$24
F5AF iF5AF JSR $F2A2 ; clall Abort All Files
F5B2 LDA #$0D
F5B4 JSR $F266 ; chrout Output One Character
F5B7 LDA #$3F
F5B9 JSR $F266 ; chrout Output One Character
F5BC JSR $F185 ; - Print Message
F5BF JMP $B3ED
F5C2 iF5C2 JSR $F5E5
F5C5 BEQ $F5AD
F5C7 BNE $F5D1
F5C9 iF5C9 JSR $F88C ; - Print "PRESS PLAY & RECORD..."
F5CC LDA #$04
F5CE JSR $F619
F5D1 iF5D1 LDX $D4 ; Current Device Number
F5D3 LDA #$BF
F5D5 LDY $D3 ; Current Secondary Address
F5D7 CPY #$60
F5D9 BEQ $F5E2
F5DB LDY #$00
F5DD LDA #$02
F5DF STA ($D6),Y ; Pointer: Start of Tape Buffer
F5E1 TYA
F5E2 iF5E2 STA $BA,X
F5E4 iF5E4 RTS
F5E5 iF5E5 LDA $9D ; Flag: 0 = Load, 1 = Verify (Kernel)
F5E7 PHA
F5E8 iF5E8 JSR $F89A ; - Initiate Tape Read
F5EB LDY #$00
F5ED LDA ($D6),Y ; Pointer: Start of Tape Buffer
F5EF CMP #$05
F5F1 BEQ $F614
F5F3 CMP #$01
F5F5 BEQ $F5FB
F5F7 CMP #$04
F5F9 BNE $F5E8
F5FB iF5FB TAX
F5FC JSR $F351 ; Check Direct
F5FF BNE $F612
F601 LDY #$A3
F603 JSR $F185 ; - Print Message
F606 LDY #$05
F608 iF608 LDA ($D6),Y ; Pointer: Start of Tape Buffer
F60A JSR $FFD2 ; chrout Output Vector, chrout
F60D INY
F60E CPY #$15
F610 BNE $F608
F612 iF612 LDY #$01
F614 iF614 PLA
F615 STA $9D ; Flag: 0 = Load, 1 = Verify (Kernel)
F617 TYA
F618 RTS
F619 iF619 STA $B4
F61B JSR $F695 ; - Get Buffer Address
F61E LDA $FC
F620 PHA
F621 LDA $FB ; I/O Start Address
F623 PHA
F624 LDA $CA
F626 PHA
F627 LDA $C9 ; Tape End Addresses/End of Program
F629 PHA
F62A LDY #$BF
F62C LDA #$20
F62E iF62E STA ($D6),Y ; Pointer: Start of Tape Buffer
F630 DEY
F631 BNE $F62E
F633 LDA $B4
F635 STA ($D6),Y ; Pointer: Start of Tape Buffer
F637 INY
F638 LDA $FB ; I/O Start Address
F63A STA ($D6),Y ; Pointer: Start of Tape Buffer
F63C INY
F63D LDA $FC
F63F STA ($D6),Y ; Pointer: Start of Tape Buffer
F641 INY
F642 LDA $C9 ; Tape End Addresses/End of Program
F644 STA ($D6),Y ; Pointer: Start of Tape Buffer
F646 INY
F647 LDA $CA
F649 STA ($D6),Y ; Pointer: Start of Tape Buffer
F64B INY
F64C STY $B5
F64E LDY #$00
F650 STY $B4
F652 iF652 LDY $B4
F654 CPY $D1 ; Length of Current File Name
F656 BEQ $F664
F658 LDA ($DA),Y ; Pointer: Current File Name
F65A LDY $B5
F65C STA ($D6),Y ; Pointer: Start of Tape Buffer
F65E INC $B4
F660 INC $B5
F662 BNE $F652
F664 iF664 JSR $F6AB ; - Set Buffer Stat / End Pointers
F667 LDA #$69
F669 STA $C3 ; Cassette Short Cnt (64=00AB): counter of seconds before tape write / checksum
F66B JSR $F8D5
F66E PLA
F66F STA $C9 ; Tape End Addresses/End of Program
F671 PLA
F672 STA $CA
F674 PLA
F675 STA $FB ; I/O Start Address
F677 PLA
F678 STA $FC
F67A RTS
F67B iF67B JSR $F92B ; ?
F67E LDX #$00
F680 LDY #$01
F682 iF682 LDA ($D6),Y ; Pointer: Start of Tape Buffer
F684 STA $C7,X ; Pointer: Tape Buffer/ Screen Scrolling
F686 INX
F687 INY
F688 CPX #$04
F68A BNE $F682
F68C LDA $C7 ; Pointer: Tape Buffer/ Screen Scrolling
F68E STA $FB ; I/O Start Address
F690 LDA $C8
F692 STA $FC
F694 RTS
; - Get Buffer Address
F695 iF695 LDA #$7A
F697 STA $D6 ; Pointer: Start of Tape Buffer
F699 LDA #$02
F69B STA $D7
F69D LDA $D4 ; Current Device Number
F69F LSR
F6A0 BCS $F6AA
F6A2 LDA #$3A
F6A4 STA $D6 ; Pointer: Start of Tape Buffer
F6A6 LDA #$03
F6A8 STA $D7
F6AA iF6AA RTS
; - Set Buffer Stat / End Pointers
F6AB iF6AB JSR $F92B ; ?
F6AE JSR $F695 ; - Get Buffer Address
F6B1 LDA $D6 ; Pointer: Start of Tape Buffer
F6B3 STA $FB ; I/O Start Address
F6B5 CLC
F6B6 ADC #$C0
F6B8 STA $C9 ; Tape End Addresses/End of Program
F6BA LDA $D7
F6BC STA $FC
F6BE ADC #$00
F6C0 STA $CA
F6C2 RTS
; syst Perform [sys]
F6C3 iF6C3 JSR $BD84 ; frmnum Confirm Result
F6C6 JSR $C92D ; getadr Convert FAC#1 to Integer in LINNUM
F6C9 JMP ($0011) ; Temp: Integer Value
; ?
F6CC iF6CC LDA $2A ; Pointer: Start of BASIC Variables
F6CE STA $C9 ; Tape End Addresses/End of Program
F6D0 LDA $2B
F6D2 STA $CA
F6D4 LDA $29
F6D6 STA $FC
F6D8 LDA $28 ; Pointer: Start of BASIC Text [0401]
F6DA STA $FB ; I/O Start Address
F6DC RTS
; savet Perform [save]
F6DD iF6DD JSR $F47D ; slpara Get Parameters For LOAD/SAVE
F6E0 iF6E0 JSR $F6CC ; ?
F6E3 iF6E3 LDA $D4 ; Current Device Number
F6E5 BNE $F6EC
F6E7 iF6E7 LDY #$74
F6E9 JMP $F5AF
F6EC iF6EC CMP #$03
F6EE BEQ $F6E7
F6F0 BCC $F742
F6F2 LDA #$61
F6F4 STA $D3 ; Current Secondary Address
F6F6 LDY $D1 ; Length of Current File Name
F6F8 BNE $F6FD
F6FA JMP $BF00 ; synerr Output ?SYNTAX Error
F6FD iF6FD JSR $F4A5
F700 JSR $F0D5 ; listn Send LISTEN Command on IEEE Bus
F703 LDA $D3 ; Current Secondary Address
F705 JSR $F143
F708 LDY #$00
F70A JSR $FBBB ; - Reset Tape Pointer
F70D LDA $C7 ; Pointer: Tape Buffer/ Screen Scrolling
F70F JSR $F19E
F712 LDA $C8
F714 JSR $F19E
F717 iF717 JSR $FD0B
F71A BEQ $F72C
F71C LDA ($C7),Y ; Pointer: Tape Buffer/ Screen Scrolling
F71E JSR $F19E
F721 JSR $F343 ; stop Check STOP Key
F724 INC $C7 ; Pointer: Tape Buffer/ Screen Scrolling
F726 BNE $F717
F728 INC $C8
F72A BNE $F717
F72C iF72C JSR $F1B9 ; untlk Send UNLISTEN
F72F iF72F BIT $D3
F731 BMI $F7AB
F733 JSR $F0D5 ; listn Send LISTEN Command on IEEE Bus
F736 LDA $D3 ; Current Secondary Address
F738 AND #$EF
F73A ORA #$E0
F73C JSR $F143
F73F JMP $F1B9 ; untlk Send UNLISTEN
F742 iF742 JSR $F695 ; - Get Buffer Address
F745 JSR $F88C ; - Print "PRESS PLAY & RECORD..."
F748 JSR $F351 ; Check Direct
F74B BNE $F755
F74D LDY #$64
F74F JSR $F185 ; - Print Message
F752 JSR $F45C
F755 iF755 LDA #$01
F757 JSR $F619
F75A JSR $F8CE
F75D LDA $D3 ; Current Secondary Address
F75F AND #$02
F761 BEQ $F7AB
F763 LDA #$05
F765 JMP $F619
; Update Jiffy Clock
F768 iF768 INC $99 ; Jiffy clock correction: 623rd 1/60 sec does not increment time
F76A LDA $99 ; Jiffy clock correction: 623rd 1/60 sec does not increment time
F76C BNE $F770
F76E INC $9A
F770 iF770 CMP #$6F
F772 BNE $F77A
F774 LDA $9A
F776 CMP #$02
F778 BEQ $F79B
F77A iF77A INC $8F
F77C BNE $F784
F77E INC $8E
F780 BNE $F784
F782 INC $8D ; Real-Time Jiffy Clock (approx) 1/60 Sec
F784 iF784 LDX #$00
F786 iF786 LDA $8D,X ; Real-Time Jiffy Clock (approx) 1/60 Sec
F788 CMP $F7AC,X ; ? DATA
F78B BCC $F7A1
F78D INX
F78E CPX #$03
F790 BNE $F786
F792 LDA #$00
F794 iF794 STA $8C,X
F796 DEX
F797 BNE $F794
F799 BEQ $F7A1
F79B iF79B LDA #$00
F79D STA $99 ; Jiffy clock correction: 623rd 1/60 sec does not increment time
F79F STA $9A
F7A1 iF7A1 LDA $E812
F7A4 CMP $E812
F7A7 BNE $F7A1
F7A9 STA $9B ; Flag: STOP key / RVS key
F7AB iF7AB RTS
; ? DATA
F7AC sF7AC .byte 4F 1A 01 ;o..
; chkin Set Input Device
F7AF iF7AF PHA
F7B0 TXA
F7B1 PHA
F7B2 TYA
F7B3 PHA
F7B4 LDA #$00
F7B6 STA $96 ; Kernal I/O Status Word: ST
F7B8 TXA
F7B9 JSR $F2C1
F7BC BEQ $F7C3
F7BE iF7BE LDY #$17
F7C0 iF7C0 JMP $F5AF
F7C3 iF7C3 JSR $F2CD
F7C6 LDA $D4 ; Current Device Number
F7C8 BEQ $F7DA
F7CA CMP #$03
F7CC BEQ $F7DA
F7CE BCS $F7DF
F7D0 LDX $D3 ; Current Secondary Address
F7D2 CPX #$60
F7D4 BEQ $F7DA
F7D6 LDY #$86
F7D8 BNE $F7C0
F7DA iF7DA STA $AF ; Default Input Device (0)
F7DC JMP $F29C
F7DF iF7DF PHA
F7E0 JSR $DBE1 ; ?
F7E3 JSR $F0D2 ; talk Send TALK Command on IEEE Bus
F7E6 LDA $D3 ; Current Secondary Address
F7E8 BPL $F7F0
F7EA JSR $F198
F7ED JMP $F7F3
F7F0 iF7F0 JSR $F193
F7F3 iF7F3 LDA $96 ; Kernal I/O Status Word: ST
F7F5 BPL $F7FA
F7F7 JMP $F4BB
F7FA iF7FA PLA
F7FB JMP $F7DA
; chkout Set Output Device
F7FE iF7FE PHA
F7FF TXA
F800 PHA
F801 TYA
F802 PHA
F803 LDA #$00
F805 STA $96 ; Kernal I/O Status Word: ST
F807 TXA
F808 JSR $F2C1
F80B BNE $F7BE
F80D JSR $F2CD
F810 LDA $D4 ; Current Device Number
F812 BNE $F818
F814 LDY #$94
F816 BNE $F7C0
F818 iF818 CMP #$03
F81A BEQ $F828
F81C BCS $F82D
F81E LDX $D3 ; Current Secondary Address
F820 CPX #$60
F822 BNE $F828
F824 LDY #$94
F826 BNE $F7C0
F828 iF828 STA $B0 ; Default Output (CMD) Device (3)
F82A JMP $F29C
F82D iF82D PHA
F82E JSR $DBE1 ; ?
F831 JSR $F0D5 ; listn Send LISTEN Command on IEEE Bus
F834 LDA $D3 ; Current Secondary Address
F836 BPL $F83D
F838 JSR $F148
F83B BNE $F840
F83D iF83D JSR $F143
F840 iF840 LDA $96 ; Kernal I/O Status Word: ST
F842 BPL $F847
F844 JMP $F4BB
F847 iF847 PLA
F848 JMP $F828
; - Bump Tape Pointer
F84B iF84B JSR $F695 ; - Get Buffer Address
F84E LDX $D4 ; Current Device Number
F850 INC $BA,X
F852 LDY $BA,X
F854 CPY #$C0
F856 RTS
; - Print "PRESS PLAY ON TAPE"
F857 iF857 JSR $F87A ; - Check Tape Status
F85A BEQ $F88B
F85C LDY #$41
F85E iF85E JSR $F185 ; - Print Message
F861 LDY #$56
F863 JSR $F185 ; - Print Message
F866 LDA $D4 ; Current Device Number
F868 ORA #$30
F86A JSR $E202 ; - Output to Screen
F86D iF86D JSR $F935
F870 JSR $F87A ; - Check Tape Status
F873 BNE $F86D
F875 LDY #$AA
F877 JMP $F185 ; - Print Message
; - Check Tape Status
F87A iF87A LDA #$10
F87C LDX $D4 ; Current Device Number
F87E DEX
F87F BEQ $F883
F881 LDA #$20
F883 iF883 BIT $E810
F886 BNE $F88B
F888 BIT $E810
F88B iF88B RTS
; - Print "PRESS PLAY & RECORD..."
F88C iF88C JSR $F87A ; - Check Tape Status
F88F BEQ $F88B
F891 LDY #$41
F893 JSR $F185 ; - Print Message
F896 LDY #$4D
F898 BNE $F85E
; - Initiate Tape Read
F89A iF89A LDA #$00
F89C STA $96 ; Kernal I/O Status Word: ST
F89E STA $9D ; Flag: 0 = Load, 1 = Verify (Kernel)
F8A0 JSR $F6AB ; - Set Buffer Stat / End Pointers
F8A3 iF8A3 JSR $F92B ; ?
F8A6 JSR $F857 ; - Print "PRESS PLAY ON TAPE"
F8A9 SEI
F8AA LDA #$00
F8AC STA $C2 ; Cassette Temp (64=00AA) read flags: 0=scan, 15=count, $40=load, $80=end of tape marker
F8AE STA $CE ; Cassette Temp (64=00B4): Tape read timer flag =IRQ enabled for Timer 1
F8B0 STA $CB ; Tape Timing Constants
F8B2 STA $C0 ; Index to Cassette File name/Header ID for Tape write.
F8B4 STA $C1 ; Tape Pass 2 Error Log
F8B6 STA $B2 ; Flag: Tape Byte-Received
F8B8 LDX $D4 ; Current Device Number
F8BA DEX
F8BB BEQ $F8C4
F8BD LDA #$90
F8BF STA $E84E
F8C2 BNE $F8C7
F8C4 iF8C4 INC $E811
F8C7 iF8C7 LDX #$0E
F8C9 BNE $F8E0 ; - Common Tape Code
; - Initiate Tape Write
F8CB iF8CB JSR $F6AB ; - Set Buffer Stat / End Pointers
F8CE iF8CE JSR $F92B ; ?
F8D1 LDA #$14
F8D3 STA $C3 ; Cassette Short Cnt (64=00AB): counter of seconds before tape write / checksum
F8D5 iF8D5 JSR $F88C ; - Print "PRESS PLAY & RECORD..."
F8D8 SEI
F8D9 LDA #$A0
F8DB STA $E84E
F8DE LDX #$08
; - Common Tape Code
F8E0 iF8E0 JSR $FCE0 ; - Set IRQ Vector
F8E3 LDA #$02
F8E5 STA $DE ; Cassette Read / Write Block Count
F8E7 JSR $FBC9 ; - New Character Setup
F8EA DEC $E813
F8ED LDX $D4 ; Current Device Number
F8EF DEX
F8F0 BNE $F8FB
F8F2 LDA #$34
F8F4 STA $E813
F8F7 STA $F9 ; Tape Motor Interlock #1
F8F9 BNE $F905
F8FB iF8FB LDA $E840 ; VIA CHIP
F8FE STX $FA ; Tape Motor Interlock #2
F900 AND #$EF
F902 STA $E840 ; VIA CHIP
F905 iF905 LDX #$FF
F907 iF907 LDY #$FF
F909 iF909 DEY
F90A BNE $F909
F90C DEX
F90D BNE $F907
F90F STA $E849
F912 CLI
; - Wait For Tape
F913 iF913 LDA #$E4
F915 CMP $91
F917 BEQ $F92A
F919 JSR $F935
F91C BIT $E813
F91F BPL $F913 ; - Wait For Tape
F921 BIT $E812
F924 JSR $F768 ; Update Jiffy Clock
F927 JMP $F913 ; - Wait For Tape
F92A iF92A RTS
; ?
F92B iF92B JSR $F935
F92E LDA #$E4
F930 CMP $91
F932 BNE $F92B ; ?
F934 RTS
F935 iF935 JSR $F335 ; - -stop-
F938 BNE $F942
F93A JSR $FCC0 ; - Wind Up Tape I/O
F93D JSR $F2B8
F940 STA $10 ; 3: width of source (unused - from TTY)
F942 iF942 JMP $B7C6 ; stop Perform [stop], [end], break
F945 iF945 STX $CC
F947 LDA $CB ; Tape Timing Constants
F949 ASL
F94A ASL
F94B CLC
F94C ADC $CB ; Tape Timing Constants
F94E CLC
F94F ADC $CC
F951 STA $CC
F953 LDA #$00
F955 BIT $CB
F957 BMI $F95A
F959 ROL
F95A iF95A ASL $CC
F95C ROL
F95D ASL $CC
F95F ROL
F960 TAX
F961 iF961 LDA $E848
F964 CMP #$15
F966 BCC $F961
F968 ADC $CC
F96A STA $E844
F96D TXA
F96E ADC $E849
F971 STA $E845
F974 CLI
F975 RTS
; - Read Tape Bits
F976 iF976 LDX $E849
F979 LDY #$FF
F97B TYA
F97C SBC $E848
F97F CPX $E849
F982 BNE $F976 ; - Read Tape Bits
F984 STX $CC
F986 TAX
F987 STY $E848
F98A STY $E849
F98D TYA
F98E SBC $CC
F990 STX $CC
F992 LSR
F993 ROR $CC
F995 LSR
F996 ROR $CC
F998 LDA $CB ; Tape Timing Constants
F99A CLC
F99B ADC #$3C
F99D BIT $E840
F9A0 BIT $E810
F9A3 CMP $CC
F9A5 BCS $F9F1
F9A7 LDX $B2 ; Flag: Tape Byte-Received
F9A9 BEQ $F9AE
F9AB JMP $FA9C ; - Store Tape Characters
F9AE iF9AE LDX $B7 ; Temp Data Area (64=00A3)
F9B0 BMI $F9CD
F9B2 LDX #$00
F9B4 ADC #$30
F9B6 ADC $CB ; Tape Timing Constants
F9B8 CMP $CC
F9BA BCS $F9D8
F9BC INX
F9BD ADC #$26
F9BF ADC $CB ; Tape Timing Constants
F9C1 CMP $CC
F9C3 BCS $F9DC
F9C5 ADC #$2C
F9C7 ADC $CB ; Tape Timing Constants
F9C9 CMP $CC
F9CB BCC $F9D0
F9CD iF9CD JMP $FA4C
F9D0 iF9D0 LDA $CE ; Cassette Temp (64=00B4): Tape read timer flag =IRQ enabled for Timer 1
F9D2 BEQ $F9F1
F9D4 STA $BE ; Cassette Temp (64=00A8)
F9D6 BNE $F9F1
F9D8 iF9D8 INC $BF ; RS-232 Flag: Check for Start Bit (64=00A9)
F9DA BCS $F9DE
F9DC iF9DC DEC $BF ; RS-232 Flag: Check for Start Bit (64=00A9)
F9DE iF9DE SEC
F9DF SBC #$13
F9E1 SBC $CC
F9E3 ADC $9C ; Timing Constant for Tape
F9E5 STA $9C ; Timing Constant for Tape
F9E7 LDA $B9 ; Temp Data Area (64=00A4)
F9E9 EOR #$01
F9EB STA $B9 ; Temp Data Area (64=00A4)
F9ED BEQ $FA10
F9EF STX $D9 ; Current Character to Print
F9F1 iF9F1 LDA $CE ; Cassette Temp (64=00B4): Tape read timer flag =IRQ enabled for Timer 1
F9F3 BEQ $FA0D
F9F5 BIT $E84D
F9F8 BVC $FA0D
F9FA LDA #$00
F9FC STA $B9 ; Temp Data Area (64=00A4)
F9FE LDA $B7 ; Temp Data Area (64=00A3)
FA00 BPL $FA33
FA02 BMI $F9CD
FA04 iFA04 LDX #$A6
FA06 JSR $F945
FA09 LDA $B1 ; Tape Character Parity
FA0B BNE $F9D0
FA0D iFA0D JMP $E600 ; - Return From Interrupt
FA10 iFA10 LDA $9C ; Timing Constant for Tape
FA12 BEQ $FA1C
FA14 BMI $FA1A
FA16 DEC $CB ; Tape Timing Constants
FA18 DEC $CB ; Tape Timing Constants
FA1A iFA1A INC $CB ; Tape Timing Constants
FA1C iFA1C LDA #$00
FA1E STA $9C ; Timing Constant for Tape
FA20 CPX $D9 ; Current Character to Print
FA22 BNE $FA33
FA24 TXA
FA25 BNE $F9D0
FA27 LDA $BF ; RS-232 Flag: Check for Start Bit (64=00A9)
FA29 BMI $F9F1
FA2B CMP #$10
FA2D BCC $F9F1
FA2F STA $AB ; Cassette Sync No. (64=0096)
FA31 BCS $F9F1
FA33 iFA33 TXA
FA34 EOR $B1 ; Tape Character Parity
FA36 STA $B1 ; Tape Character Parity
FA38 LDA $CE ; Cassette Temp (64=00B4): Tape read timer flag =IRQ enabled for Timer 1
FA3A BEQ $FA0D
FA3C DEC $B7 ; Temp Data Area (64=00A3)
FA3E BMI $FA04
FA40 LSR $D9 ; Current Character to Print
FA42 ROR $DF ; IEEE Word Buffer
FA44 LDX #$DA
FA46 JSR $F945
FA49 JMP $E600 ; - Return From Interrupt
FA4C iFA4C LDA $AB ; Cassette Sync No. (64=0096)
FA4E BEQ $FA54
FA50 LDA $CE ; Cassette Temp (64=00B4): Tape read timer flag =IRQ enabled for Timer 1
FA52 BEQ $FA5B
FA54 iFA54 LDA $B7 ; Temp Data Area (64=00A3)
FA56 BMI $FA5B
FA58 JMP $F9DC
FA5B iFA5B LSR $CC
FA5D LDA #$93
FA5F SEC
FA60 SBC $CC
FA62 ADC $CB ; Tape Timing Constants
FA64 ASL
FA65 TAX
FA66 JSR $F945
FA69 INC $B2 ; Flag: Tape Byte-Received
FA6B LDA $CE ; Cassette Temp (64=00B4): Tape read timer flag =IRQ enabled for Timer 1
FA6D BNE $FA80
FA6F LDA $AB ; Cassette Sync No. (64=0096)
FA71 BEQ $FA99
FA73 STA $BE ; Cassette Temp (64=00A8)
FA75 LDA #$00
FA77 STA $AB ; Cassette Sync No. (64=0096)
FA79 LDA #$C0
FA7B STA $E84E
FA7E STA $CE ; Cassette Temp (64=00B4): Tape read timer flag =IRQ enabled for Timer 1
FA80 iFA80 LDA $AB ; Cassette Sync No. (64=0096)
FA82 STA $CF ; End of tape read
FA84 BEQ $FA8F
FA86 LDA #$00
FA88 STA $CE ; Cassette Temp (64=00B4): Tape read timer flag =IRQ enabled for Timer 1
FA8A LDA #$40
FA8C STA $E84E
FA8F iFA8F LDA $DF ; IEEE Word Buffer
FA91 STA $DD ; Cassette Temp
FA93 LDA $BE ; Cassette Temp (64=00A8)
FA95 ORA $BF ; RS-232 Flag: Check for Start Bit (64=00A9)
FA97 STA $D0 ; Read character error
FA99 iFA99 JMP $E600 ; - Return From Interrupt
; - Store Tape Characters
FA9C iFA9C JSR $FBC9 ; - New Character Setup
FA9F STA $B2 ; Flag: Tape Byte-Received
FAA1 LDX #$DA
FAA3 JSR $F945
FAA6 LDA $DE ; Cassette Read / Write Block Count
FAA8 BEQ $FAAC
FAAA STA $BD ; Cassette Temp (64=00A7)
FAAC iFAAC LDA #$0F
FAAE BIT $C2
FAB0 BPL $FAC9
FAB2 LDA $CF ; End of tape read
FAB4 BNE $FAC2
FAB6 LDX $DE ; Cassette Read / Write Block Count
FAB8 DEX
FAB9 BNE $FAC6
FABB LDA #$08
FABD JSR $FBC4 ; - Set Status Bit
FAC0 BNE $FAC6
FAC2 iFAC2 LDA #$00
FAC4 STA $C2 ; Cassette Temp (64=00AA) read flags: 0=scan, 15=count, $40=load, $80=end of tape marker
FAC6 iFAC6 JMP $E600 ; - Return From Interrupt
FAC9 iFAC9 BVS $FAFC
FACB BNE $FAE5
FACD LDA $CF ; End of tape read
FACF BNE $FAC6
FAD1 LDA $D0 ; Read character error
FAD3 BNE $FAC6
FAD5 LDA $BD ; Cassette Temp (64=00A7)
FAD7 LSR
FAD8 LDA $DD ; Cassette Temp
FADA BMI $FADF
FADC BCC $FAF6
FADE CLC
FADF iFADF BCS $FAF6
FAE1 AND #$0F
FAE3 STA $C2 ; Cassette Temp (64=00AA) read flags: 0=scan, 15=count, $40=load, $80=end of tape marker
FAE5 iFAE5 DEC $C2 ; Cassette Temp (64=00AA) read flags: 0=scan, 15=count, $40=load, $80=end of tape marker
FAE7 BNE $FAC6
FAE9 LDA #$40
FAEB STA $C2 ; Cassette Temp (64=00AA) read flags: 0=scan, 15=count, $40=load, $80=end of tape marker
FAED JSR $FBBB ; - Reset Tape Pointer
FAF0 LDA #$00
FAF2 STA $C3 ; Cassette Short Cnt (64=00AB): counter of seconds before tape write / checksum
FAF4 BEQ $FAC6
FAF6 iFAF6 LDA #$80
FAF8 STA $C2 ; Cassette Temp (64=00AA) read flags: 0=scan, 15=count, $40=load, $80=end of tape marker
FAFA BNE $FAC6
FAFC iFAFC LDA $CF ; End of tape read
FAFE BEQ $FB0A
FB00 LDA #$04
FB02 JSR $FBC4 ; - Set Status Bit
FB05 LDA #$00
FB07 JMP $FB8B
FB0A iFB0A JSR $FD0B
FB0D BNE $FB12
FB0F JMP $FB89
FB12 iFB12 LDX $BD ; Cassette Temp (64=00A7)
FB14 DEX
FB15 BEQ $FB44
FB17 LDA $9D ; Flag: 0 = Load, 1 = Verify (Kernel)
FB19 BEQ $FB27
FB1B LDY #$00
FB1D LDA $DD ; Cassette Temp
FB1F CMP ($C7),Y ; Pointer: Tape Buffer/ Screen Scrolling
FB21 BEQ $FB27
FB23 LDA #$01
FB25 STA $D0 ; Read character error
FB27 iFB27 LDA $D0 ; Read character error
FB29 BEQ $FB77
FB2B LDX #$3D
FB2D CPX $C0 ; Index to Cassette File name/Header ID for Tape write.
FB2F BCC $FB70
FB31 LDX $C0 ; Index to Cassette File name/Header ID for Tape write.
FB33 LDA $C8
FB35 STA $0101,X
FB38 LDA $C7 ; Pointer: Tape Buffer/ Screen Scrolling
FB3A STA $0100,X ; Micro-Processor System Stack Area
FB3D INX
FB3E INX
FB3F STX $C0 ; Index to Cassette File name/Header ID for Tape write.
FB41 JMP $FB77
FB44 iFB44 LDX $C1 ; Tape Pass 2 Error Log
FB46 CPX $C0 ; Index to Cassette File name/Header ID for Tape write.
FB48 BEQ $FB81
FB4A LDA $C7 ; Pointer: Tape Buffer/ Screen Scrolling
FB4C CMP $0100,X ; Micro-Processor System Stack Area
FB4F BNE $FB81
FB51 LDA $C8
FB53 CMP $0101,X
FB56 BNE $FB81
FB58 INC $C1 ; Tape Pass 2 Error Log
FB5A INC $C1 ; Tape Pass 2 Error Log
FB5C LDA $9D ; Flag: 0 = Load, 1 = Verify (Kernel)
FB5E BEQ $FB6C
FB60 LDA $DD ; Cassette Temp
FB62 LDY #$00
FB64 CMP ($C7),Y ; Pointer: Tape Buffer/ Screen Scrolling
FB66 BEQ $FB81
FB68 LDA #$01
FB6A STA $D0 ; Read character error
FB6C iFB6C LDA $D0 ; Read character error
FB6E BEQ $FB77
FB70 iFB70 LDA #$10
FB72 JSR $FBC4 ; - Set Status Bit
FB75 BNE $FB81
FB77 iFB77 LDA $9D ; Flag: 0 = Load, 1 = Verify (Kernel)
FB79 BNE $FB81
FB7B LDA $DD ; Cassette Temp
FB7D LDY #$00
FB7F STA ($C7),Y ; Pointer: Tape Buffer/ Screen Scrolling
FB81 iFB81 INC $C7 ; Pointer: Tape Buffer/ Screen Scrolling
FB83 BNE $FBB8
FB85 INC $C8
FB87 BNE $FBB8
FB89 iFB89 LDA #$80
FB8B iFB8B STA $C2 ; Cassette Temp (64=00AA) read flags: 0=scan, 15=count, $40=load, $80=end of tape marker
FB8D LDX $DE ; Cassette Read / Write Block Count
FB8F DEX
FB90 BMI $FB94
FB92 STX $DE ; Cassette Read / Write Block Count
FB94 iFB94 DEC $BD ; Cassette Temp (64=00A7)
FB96 BEQ $FBA0
FB98 LDA $C0 ; Index to Cassette File name/Header ID for Tape write.
FB9A BNE $FBB8
FB9C STA $DE ; Cassette Read / Write Block Count
FB9E BEQ $FBB8
FBA0 iFBA0 JSR $FCC0 ; - Wind Up Tape I/O
FBA3 JSR $FBBB ; - Reset Tape Pointer
FBA6 LDY #$00
FBA8 STY $C3 ; Cassette Short Cnt (64=00AB): counter of seconds before tape write / checksum
FBAA JSR $FCF9
FBAD LDA $C3 ; Cassette Short Cnt (64=00AB): counter of seconds before tape write / checksum
FBAF EOR $DD ; Cassette Temp
FBB1 BEQ $FBB8
FBB3 LDA #$20
FBB5 JSR $FBC4 ; - Set Status Bit
FBB8 iFBB8 JMP $E600 ; - Return From Interrupt
; - Reset Tape Pointer
FBBB iFBBB LDA $FC
FBBD STA $C8
FBBF LDA $FB ; I/O Start Address
FBC1 STA $C7 ; Pointer: Tape Buffer/ Screen Scrolling
FBC3 RTS
; - Set Status Bit
FBC4 iFBC4 ORA $96 ; Kernal I/O Status Word: ST
FBC6 STA $96 ; Kernal I/O Status Word: ST
FBC8 RTS
; - New Character Setup
FBC9 iFBC9 LDA #$08
FBCB STA $B7 ; Temp Data Area (64=00A3)
FBCD LDA #$00
FBCF STA $B9 ; Temp Data Area (64=00A4)
FBD1 STA $BE ; Cassette Temp (64=00A8)
FBD3 STA $B1 ; Tape Character Parity
FBD5 STA $BF ; RS-232 Flag: Check for Start Bit (64=00A9)
FBD7 RTS
; - Write Transition to Tape
FBD8 iFBD8 LDA $DD ; Cassette Temp
FBDA LSR
FBDB LDA #$60
FBDD BCC $FBE1
FBDF iFBDF LDA #$B0
FBE1 iFBE1 LDX #$00
FBE3 iFBE3 STA $E848
FBE6 STX $E849
FBE9 LDA $E840 ; VIA CHIP
FBEC EOR #$08
FBEE STA $E840 ; VIA CHIP
FBF1 AND #$08
FBF3 RTS
; - Write Data to Tape
FBF4 iFBF4 SEC
FBF5 ROR $C8
FBF7 BMI $FC35
; - IRQ Entry Point
FBF9 LDA $BE ; Cassette Temp (64=00A8)
FBFB BNE $FC0F
FBFD LDA #$10
FBFF LDX #$01
FC01 JSR $FBE3
FC04 BNE $FC35
FC06 INC $BE ; Cassette Temp (64=00A8)
FC08 LDA $C8
FC0A BPL $FC35
FC0C JMP $FC86
FC0F iFC0F LDA $BF ; RS-232 Flag: Check for Start Bit (64=00A9)
FC11 BNE $FC1C
FC13 JSR $FBDF
FC16 BNE $FC35
FC18 INC $BF ; RS-232 Flag: Check for Start Bit (64=00A9)
FC1A BNE $FC35
FC1C iFC1C JSR $FBD8 ; - Write Transition to Tape
FC1F BNE $FC35
FC21 LDA $B9 ; Temp Data Area (64=00A4)
FC23 EOR #$01
FC25 STA $B9 ; Temp Data Area (64=00A4)
FC27 BEQ $FC38
FC29 LDA $DD ; Cassette Temp
FC2B EOR #$01
FC2D STA $DD ; Cassette Temp
FC2F AND #$01
FC31 EOR $B1 ; Tape Character Parity
FC33 STA $B1 ; Tape Character Parity
FC35 iFC35 JMP $E600 ; - Return From Interrupt
FC38 iFC38 LSR $DD ; Cassette Temp
FC3A DEC $B7 ; Temp Data Area (64=00A3)
FC3C LDA $B7 ; Temp Data Area (64=00A3)
FC3E BEQ $FC7D
FC40 BPL $FC35
FC42 iFC42 JSR $FBC9 ; - New Character Setup
FC45 CLI
FC46 LDA $BA
FC48 BEQ $FC5C
FC4A LDX #$00
FC4C STX $D9 ; Current Character to Print
FC4E DEC $BA
FC50 LDX $DE ; Cassette Read / Write Block Count
FC52 CPX #$02
FC54 BNE $FC58
FC56 ORA #$80
FC58 iFC58 STA $DD ; Cassette Temp
FC5A BNE $FC35
FC5C iFC5C JSR $FD0B
FC5F BCC $FC6B
FC61 BNE $FBF4 ; - Write Data to Tape
FC63 INC $C8
FC65 LDA $D9 ; Current Character to Print
FC67 STA $DD ; Cassette Temp
FC69 BCS $FC35
FC6B iFC6B LDY #$00
FC6D LDA ($C7),Y ; Pointer: Tape Buffer/ Screen Scrolling
FC6F STA $DD ; Cassette Temp
FC71 EOR $D9 ; Current Character to Print
FC73 STA $D9 ; Current Character to Print
FC75 INC $C7 ; Pointer: Tape Buffer/ Screen Scrolling
FC77 BNE $FC35
FC79 INC $C8
FC7B BNE $FC35
FC7D iFC7D LDA $B1 ; Tape Character Parity
FC7F EOR #$01
FC81 STA $DD ; Cassette Temp
FC83 iFC83 JMP $E600 ; - Return From Interrupt
FC86 iFC86 DEC $DE ; Cassette Read / Write Block Count
FC88 BNE $FC8D
FC8A JSR $FCEB ; - Kill Tape Motor
FC8D iFC8D LDA #$50
FC8F STA $BD ; Cassette Temp (64=00A7)
FC91 LDX #$08
FC93 SEI
FC94 JSR $FCE0 ; - Set IRQ Vector
FC97 BNE $FC83
; - Write Tape Leader
FC99 LDA #$78
FC9B JSR $FBE1
FC9E BNE $FC83
FCA0 DEC $BD ; Cassette Temp (64=00A7)
FCA2 BNE $FC83
FCA4 JSR $FBC9 ; - New Character Setup
FCA7 DEC $C3 ; Cassette Short Cnt (64=00AB): counter of seconds before tape write / checksum
FCA9 BPL $FC83
FCAB LDX #$0A
FCAD JSR $FCE0 ; - Set IRQ Vector
FCB0 CLI
FCB1 INC $C3 ; Cassette Short Cnt (64=00AB): counter of seconds before tape write / checksum
FCB3 LDA $DE ; Cassette Read / Write Block Count
FCB5 BEQ $FCDB
FCB7 JSR $FBBB ; - Reset Tape Pointer
FCBA LDX #$09
FCBC STX $BA
FCBE BNE $FC42
; - Wind Up Tape I/O
FCC0 iFCC0 PHP
FCC1 SEI
FCC2 JSR $FCEB ; - Kill Tape Motor
FCC5 LDA #$7F
FCC7 STA $E84E
FCCA LDA #$3C
FCCC STA $E811
FCCF LDA #$3D
FCD1 STA $E813
FCD4 LDX #$0C
FCD6 JSR $FCE0 ; - Set IRQ Vector
FCD9 PLP
FCDA RTS
FCDB iFCDB JSR $FCC0 ; - Wind Up Tape I/O
FCDE BEQ $FC83
; - Set IRQ Vector
FCE0 iFCE0 LDA $FD4C,X ; - Kernal Reset Vectors WORD
FCE3 STA $90 ; Vector: Hardware Interrupt [3: E62E, 4: E455]
FCE5 LDA $FD4D,X
FCE8 STA $91
FCEA RTS
; - Kill Tape Motor
FCEB iFCEB LDA #$3C
FCED STA $E813
FCF0 LDA $E840 ; VIA CHIP
FCF3 ORA #$10
FCF5 STA $E840 ; VIA CHIP
FCF8 RTS
FCF9 iFCF9 LDA ($C7),Y ; Pointer: Tape Buffer/ Screen Scrolling
FCFB EOR $C3 ; Cassette Short Cnt (64=00AB): counter of seconds before tape write / checksum
FCFD STA $C3 ; Cassette Short Cnt (64=00AB): counter of seconds before tape write / checksum
FCFF INC $C7 ; Pointer: Tape Buffer/ Screen Scrolling
FD01 BNE $FD05
FD03 INC $C8
FD05 iFD05 JSR $FD0B
FD08 BNE $FCF9
FD0A RTS
FD0B iFD0B LDA $C8
FD0D CMP $CA
FD0F BNE $FD15
FD11 LDA $C7 ; Pointer: Tape Buffer/ Screen Scrolling
FD13 CMP $C9 ; Tape End Addresses/End of Program
FD15 iFD15 RTS
; - Power-Up RESET Entry
FD16 LDX #$FF
FD18 SEI
FD19 TXS
FD1A CLD
FD1B JSR $E000 ; cint Initialize Editor & Screen
FD1E LDA #$FF
FD20 STA $94 ; Vector: Non-Maskable Interrupt [3:C389,4: B3FF]
FD22 LDA #$B3
FD24 STA $95
FD26 LDA #$78
FD28 STA $92 ; Vector: BRK Instr. Interrupt [3: FD17, 4: D478]
FD2A LDA #$D4
FD2C STA $93
FD2E LDA #$A4
FD30 STA $03FA ; Monitor extension vector [D7A4]
FD33 LDA #$D7
FD35 STA $03FB
FD38 LDA #$00
FD3A STA $03FC ; 4: Flag: Kernal Variable for IEEE Timeout
FD3D CLI
FD3E LDA $E810 ; PIA 1 CHIP
FD41 BMI $FD46
FD43 JMP $D472 ; Perform [monitor]
FD46 iFD46 JMP $D3B6 ; initcz Initialize BASIC RAM
; - NMI Transfer Entry
FD49 JMP ($0094) ; Vector: Non-Maskable Interrupt [3:C389,4: B3FF]
; - Kernal Reset Vectors WORD
FD4C sFD4C .word 0000 0000 0000 0000
; - IRQ Vectors For Tape I/O WORD
FD54 .word FC99 FBF9 E455 F976
; *** Resyncing *** F5F9
; - Unused EMPTY
;
; PET 8032 Jump Table
;
FD5D .byte AA AA AA AA AA AA AA AA ;........
FD65 .byte AA AA AA AA AA AA AA AA ;........
FD6D .byte AA AA AA AA AA AA AA AA ;........
FD75 .byte AA AA AA AA AA AA AA AA ;........
FD7D .byte AA AA AA AA AA AA AA AA ;........
FD85 .byte AA AA AA AA AA AA AA AA ;........
FD8D .byte AA AA AA AA AA AA AA AA ;........
FD95 .byte AA AA AA AA AA AA AA AA ;........
FD9D .byte AA AA AA AA AA AA AA AA ;........
FDA5 .byte AA AA AA AA AA AA AA AA ;........
FDAD .byte AA AA AA AA AA AA AA AA ;........
FDB5 .byte AA AA AA AA AA AA AA AA ;........
FDBD .byte AA AA AA AA AA AA AA AA ;........
FDC5 .byte AA AA AA AA AA AA AA AA ;........
FDCD .byte AA AA AA AA AA AA AA AA ;........
FDD5 .byte AA AA AA AA AA AA AA AA ;........
FDDD .byte AA AA AA AA AA AA AA AA ;........
FDE5 .byte AA AA AA AA AA AA AA AA ;........
FDED .byte AA AA AA AA AA AA AA AA ;........
FDF5 .byte AA AA AA AA AA AA AA AA ;........
FDFD .byte AA AA AA AA AA AA AA AA ;........
FE05 .byte AA AA AA AA AA AA AA AA ;........
FE0D .byte AA AA AA AA AA AA AA AA ;........
FE15 .byte AA AA AA AA AA AA AA AA ;........
FE1D .byte AA AA AA AA AA AA AA AA ;........
FE25 .byte AA AA AA AA AA AA AA AA ;........
FE2D .byte AA AA AA AA AA AA AA AA ;........
FE35 .byte AA AA AA AA AA AA AA AA ;........
FE3D .byte AA AA AA AA AA AA AA AA ;........
FE45 .byte AA AA AA AA AA AA AA AA ;........
FE4D .byte AA AA AA AA AA AA AA AA ;........
FE55 .byte AA AA AA AA AA AA AA AA ;........
FE5D .byte AA AA AA AA AA AA AA AA ;........
FE65 .byte AA AA AA AA AA AA AA AA ;........
FE6D .byte AA AA AA AA AA AA AA AA ;........
FE75 .byte AA AA AA AA AA AA AA AA ;........
FE7D .byte AA AA AA AA AA AA AA AA ;........
FE85 .byte AA AA AA AA AA AA AA AA ;........
FE8D .byte AA AA AA AA AA AA AA AA ;........
FE95 .byte AA AA AA AA AA AA AA AA ;........
FE9D .byte AA AA AA AA AA AA AA AA ;........
FEA5 .byte AA AA AA AA AA AA AA AA ;........
FEAD .byte AA AA AA AA AA AA AA AA ;........
FEB5 .byte AA AA AA AA AA AA AA AA ;........
FEBD .byte AA AA AA AA AA AA AA AA ;........
FEC5 .byte AA AA AA AA AA AA AA AA ;........
FECD .byte AA AA AA AA AA AA AA AA ;........
FED5 .byte AA AA AA AA AA AA AA AA ;........
FEDD .byte AA AA AA AA AA AA AA AA ;........
FEE5 .byte AA AA AA AA AA AA AA AA ;........
FEED .byte AA AA AA AA AA AA AA AA ;........
FEF5 .byte AA AA AA AA AA AA AA AA ;........
FEFD .byte AA AA AA AA AA AA AA AA ;........
FF05 .byte AA AA AA AA AA AA AA AA ;........
FF0D .byte AA AA AA AA AA AA AA AA ;........
FF15 .byte AA AA AA AA AA AA AA AA ;........
FF1D .byte AA AA AA AA AA AA AA AA ;........
FF25 .byte AA AA AA AA AA AA AA AA ;........
FF2D .byte AA AA AA AA AA AA AA AA ;........
FF35 .byte AA AA AA AA AA AA AA AA ;........
FF3D .byte AA AA AA AA AA AA AA AA ;........
FF45 .byte AA AA AA AA AA AA AA AA ;........
FF4D .byte AA AA AA AA AA AA AA AA ;........
FF55 .byte AA AA AA AA AA AA AA AA ;........
FF5D .byte AA AA AA AA AA AA AA AA ;........
FF65 .byte AA AA AA AA AA AA AA AA ;........
FF6D .byte AA AA AA AA AA AA AA AA ;........
FF75 .byte AA AA AA AA AA AA AA AA ;........
FF7D .byte AA AA AA AA AA AA AA AA ;........
FF85 .byte AA AA AA AA AA AA AA AA ;........
FF8D .byte AA AA AA AA AA AA ;......
; Perform [concat]
FF93 JMP $DAC7 ; Perform [concat]
; Perform [dopen]
FF96 JMP $D942 ; Perform [dopen]
; Perform [dclose]
FF99 JMP $DA07 ; Perform [dclose]
; Perform [record]
FF9C JMP $D7AF ; Perform [record]
; Perform [header]
FF9F JMP $D9D2 ; Perform [header]
; Perform [collect]
FFA2 JMP $DA65 ; Perform [collect]
; Perform [backup]
FFA5 JMP $DA7E ; Perform [backup]
; Perform [copy]
FFA8 JMP $DAA7 ; Perform [copy]
; Perform [append]
FFAB JMP $D977 ; Perform [append]
; Perform [dsave]
FFAE JMP $DB0D ; Perform [dsave]
; Perform [dload]
FFB1 JMP $DB3A ; Perform [dload]
; Perform [catalog/directory]
FFB4 JMP $D873 ; Perform [catalog/directory]
; Perform [rename]
FFB7 JMP $DB55 ; Perform [rename]
; Perform [scratch]
FFBA JMP $DB66 ; Perform [scratch]
; jmp $d995
FFBD iFFBD JMP $D995 ; ?
; Perform [open]
FFC0 JMP $F560 ; opent Perform [open]
; Perform [close]
FFC3 JMP $F2DD ; closet Perform [close]
; chkin Set Input
FFC6 iFFC6 JMP $F7AF ; chkin Set Input Device
; chkout Set Output
FFC9 iFFC9 JMP $F7FE ; chkout Set Output Device
; clrch Restore I/O Vector
FFCC iFFCC JMP $F2A6 ; clrchn Restore Default I/O
; chrin Input Vector, chrin
FFCF iFFCF JMP $F215 ; chrin Input a byte
; chrout Output Vector, chrout
FFD2 iFFD2 JMP $F266 ; chrout Output One Character
; Perform [load]
FFD5 JMP $F401 ; verfyt Perform [load]
; Perform [save]
FFD8 JMP $F6DD ; savet Perform [save]
; Perform [verify]
FFDB JMP $F4F6 ; verfyt Perform [verify]
; sys Perform [sys]
FFDE JMP $F6C3 ; syst Perform [sys]
; jmp $f343 stop Test-Stop
FFE1 iFFE1 JMP $F343 ; stop Check STOP Key
; jmp $f205 getin Get From Keyboad
FFE4 iFFE4 JMP $F205 ; - Input From Screen or Keyboard
; jmp $f2a2 clall Close All Channels And Files
FFE7 iFFE7 JMP $F2A2 ; clall Abort All Files
; jmp $f768 udtim Update System Jiffy Clock
;fff6 Vectors
FFEA iFFEA JMP $F768 ; Update Jiffy Clock
FFED TAX
FFEE TAX
FFEF TAX
FFF0 TAX
FFF1 TAX
FFF2 TAX
FFF3 TAX
FFF4 TAX
FFF5 TAX
; [aaaa] - WORD
FFF6 .word AAAA
; [aaaa] - WORD
;fffa Transfer Vectors
FFF8 .word AAAA
; [fd49] NMI WORD
FFFA .word FD49
; [fd16] RESET WORD
FFFC .word FD16
; [e442] IRQ WORD
FFFE .word E442
; Misassembly source v1.3 Generated Wed May 31 19:01:40 EET DST 1995Letzte Änderung: 2019-01-04 12:58:17