; da65 V2.13.9 - (C) Copyright 2000-2009, Ullrich von Bassewitz ; Created: 2014-01-26 12:06:00 ; Input file: kernal-2.901465-03.bin ; Page: 1 ; ; Dynamic PET Basic 2.0 Kernal ; ; Re-assembly: M. Sachse ; 26.Jan.2014 ; http://www.cbmhardware/de ; ; Source optimized for using with ACME Assembler ; ; !to "kernal-2.901465-03.bin",plain *=$f000 L0011 = $0011 L0076 = $0076 L03FA = $03FA L2020 = $2020 L4243 = $4243 L4341 = $4341 L4920 = $4920 L5020 = $5020 L5053 = $5053 L5253 = $5253 L5258 = $5258 L5259 = $5259 LC377 = $C377 LC389 = $C389 LC439 = $C439 LC590 = $C590 LC5A7 = $C5A7 LCC8B = $CC8B LCC9F = $CC9F LCDF8 = $CDF8 LCE03 = $CE03 LD57D = $D57D LD678 = $D678 LD6D2 = $D6D2 LE116 = $E116 LE1DE = $E1DE LE285 = $E285 LE2F4 = $E2F4 LE3D8 = $E3D8 LE6E4 = $E6E4 LE76A = $E76A LE775 = $E775 LE784 = $E784 LE797 = $E797 LE7A7 = $E7A7 LE7B6 = $E7B6 LE7EB = $E7EB LE7F7 = $E7F7 ERRORS: !byte $54,$4F,$4F,$20,$4D,$41,$4E,$59,$20,$46,$49,$4C,$45,$D3,$46,$49 ; TOO MANY FILE.FI !byte $4C,$45,$20,$4F,$50,$45,$CE,$46,$49,$4C,$45,$20,$4E,$4F,$54,$20 ; LE OPE.FILE NOT !byte $4F,$50,$45,$CE,$46,$49,$4C,$45,$20,$4E,$4F,$54,$20,$46,$4F,$55 ; OPE.FILE NOT FOU !byte $4E,$C4,$0D,$53,$45,$41,$52,$43,$48,$49,$4E,$47,$A0,$46,$4F,$52 ; N..SEARCHING.FOR !byte $A0,$0D,$50,$52,$45,$53,$53,$20,$50,$4C,$41,$59,$A0,$26,$20,$52 ; ..PRESS PLAY.& R !byte $45,$43,$4F,$52,$44,$A0,$4F,$4E,$20,$54,$41,$50,$45,$20,$A3,$0D ; ECORD.ON TAPE .. !byte $4C,$4F,$41,$C4,$0D,$57,$52,$49,$54,$49,$4E,$47,$A0,$0D,$56,$45 ; LOA..WRITING..VE !byte $52,$49,$46,$D9,$44,$45,$56,$49,$43,$45,$20,$4E,$4F,$54,$20,$50 ; RIF.DEVICE NOT P !byte $52,$45,$53,$45,$4E,$D4,$4E,$4F,$54,$20,$49,$4E,$50,$55,$54,$20 ; RESEN.NOT INPUT !byte $46,$49,$4C,$C5,$4E,$4F,$54,$20,$4F,$55,$54,$50,$55,$54,$20,$46 ; FIL.NOT OUTPUT F !byte $49,$4C,$C5,$0D,$46,$4F,$55,$4E,$44,$A0,$0D,$4F,$4B,$8D,$0D,$52 ; IL..FOUND..OK..R !byte $45,$41,$44,$59,$2E,$8D ; EADY.. ;$F0B6: SENDS TALK TALK: lda #$40 bne LF0BC ; $F0BA: SENDS LISTEN LISTEN: lda #$20 LF0BC: pha lda $E840 ora #$02 sta $E840 lda #$3C sta $E821 bit $A0 ; flag beq LF0DF lda #$34 sta $E811 jsr ISOUR lda #$00 sta $A0 lda #$3C sta $E811 LF0DF: pla ora $D4 sta $A5 LF0E4: lda $E840 bpl LF0E4 and #$FB sta $E840 ; $F0EE: SENDS CHAR (FROM $A5) TO IEEE-BUS ISOUR: lda #$3C sta $E823 lda $E840 and #$41 cmp #$41 beq ERRP7 lda $A5 eor #$FF sta $E822 LF103: bit $E840 bvc LF103 lda #$34 sta $E823 lda #$FF sta $E845 LF112: lda $E840 bit $E84D bvs ERRPO lsr bcc LF112 LF11D: lda #$3C sta $E823 lda #$FF sta $E822 rts ; $F128: SENDS SEC-ADR (FROM AC) TO IEEE-BUS SECND: sta $A5 jsr ISOUR ; $F12D: STOPS ATN ON IEEE-BUS SCATN: lda $E840 ora #$04 sta $E840 rts ; $F136: ERROR-HANDLING ON IEEE-BUS ERRPO: lda #$01 LF138: jsr LFB7F bne LF11D ERRP7: lda #$80 bmi LF138 LF141: lda #$02 jsr LFB7F LF146: lda $E840 and #$FD sta $E840 lda #$34 sta $E821 lda #$0D rts ; $F156: DISPLAY ERROR MSG: lda ERRORS,y php and #$7F jsr LE3D8 ; display character iny plp bpl MSG rts ; $F164: LISTEN AND SEC-ADR TO IEEE-BUS TKSA: sta $A5 jsr ISOUR LF169: jsr LF146 jmp SCATN ; $F16F: SENDS CHAR FROM AC TO IEEE-BUS CIOUT: bit $A0 bmi LF177 dec $A0 bne LF17C LF177: pha jsr ISOUR pla LF17C: sta $A5 rts ; $F17F: SENDS UNTALK TO IEEE-BUS UNTLK: lda #$5F bne LF185 ; $F183: SENDS UNLISTEN TO IEEE-BUS UNLSN: lda #$3F LF185: nop nop jsr LF0BC bne SCATN ; $F18C: READS CHAR FROM IEEE-BUS TO AC ACPTR: lda #$34 sta $E821 lda $E840 ora #$02 sta $E840 lda #$FF sta $E845 LF19E: bit $E84D bvs LF141 bit $E840 bmi LF19E lda $E840 and #$FD sta $E840 bit $E810 bvs LF1BA lda #$40 jsr LFB7F LF1BA: lda $E820 eor #$FF pha lda #$3C sta $E821 LF1C5: bit $E840 bpl LF1C5 lda #$34 sta $E821 pla rts ; $F1D1: INPUT FROM KEYBOARD OR IEEE-BUS GETIN: lda #$00 sta $96 lda $AF bne LF1F0 lda $9E beq LF22E sei jmp LE285 ; $F1E1: INPUT ONE CHAR BASIN: lda $AF ; input-device, $00:keyboard bne LF1F0 lda $C6 ; cursor position: column sta $A4 ; temporary mem for cursor column lda $D8 ; cursor position: row sta $A3 ; temporary mem for cursor row jmp LE2F4 ; input from keyboard LF1F0: cmp #$03 bne LF1FD sta $AC ; flag for input lda $D5 ; flag for one or two lines sta $A1 ; temporary mem for line-length jmp LE2F4 ; input from keyboard LF1FD: bcs LF228 stx $AD jsr LF215 pha jsr LF215 bne LF20F lda #$40 jsr LFB7F LF20F: dec $BA,x ldx $AD pla rts LF215: jsr JTP20 bne LF225 jsr TRBLK ldx $D4 ; recoder-nr. lda #$00 sta $BA,x beq LF215 LF225: lda ($D6),y rts LF228: lda $96 beq LF22F lda #$0D LF22E: rts LF22F: jmp ACPTR ; $F232: CHAR-OUTPUT ON SCREEN, TAPE, IEEE-BUS BSOUT: pha lda $B0 cmp #$03 bne LF23D pla jmp LE3D8 LF23D: bmi LF243 pla jmp CIOUT LF243: pla LF244: sta $B4 cmp #$0A beq LF22E pha txa pha tya pha jsr JTP20 bne LF264 jsr TWBLK ldx $D4 lda #$01 sta $BA,x ldy #$00 lda #$02 sta ($D6),y iny LF264: lda $B4 sta ($D6),y LF268: pla tay pla tax pla rts ; $F26E: COUNT OF OPEN FILES = 0 CLALL: lda #$00 sta $AE ; $F272: DEL IEEE-CHANNELS, BACK TO NORMAL I/O CLRCH: lda $B0 cmp #$04 bcc LF27B jsr UNLSN LF27B: lda $AF cmp #$04 bcc SETDV jsr UNTLK ; $F284: SETS INPUT DEVICE:$00:KEYBOARD; OUTPUT:$03:SCREEN SETDV: lda #$03 sta $B0 lda #$00 sta $AF rts ; $F28D: LOOKS FOR ENTRY IN FILENUMBER-TABLE JLTLK: ldx $AE LF28F: dex bmi LF2A8 cmp $0251,x beq LF2A8 bne LF28F ; $F299: SETS FILENUMBER, SECONDARY AND PRIMARY ADR OF ACTUAL FILE JZ100: lda $0251,x sta $D2 lda $025B,x sta $D4 lda $0265,x sta $D3 LF2A8: rts ; $F2A9: CLOSE CLOSE: jsr PARS2 lda $D2 jsr JLTLK bne LF300 jsr JZ100 txa pha lda $D4 beq LF2E4 cmp #$03 beq LF2E4 bcs LF2E1 lda $D3 and #$0F beq LF2E4 jsr ZZZ lda #$00 jsr LF244 jsr TWBLK lda $D3 cmp #$62 bne LF2E4 lda #$05 jsr TAPEH jmp LF2E4 LF2E1: jsr CLSEI LF2E4: pla ; $F2E5: DELETS FILE FROM TABLE DELFL: tax dec $AE cpx $AE beq LF300 ldy $AE lda $0251,y sta $0251,x lda $025B,y sta $025B,x lda $0265,y sta $0265,x LF300: rts ; $F301: STOP-KEY TEST; Z-FLAG SET IF PRESSED STOP1: lda $9B cmp #$EF bne LF30E php jsr CLRCH sta $9E plp LF30E: rts ; $F30F: STOP-KEY TEST; RETURN TO READY-MODE IF PRESSED STOP: jsr STOP1 jmp $C73F ; $F315: REPRESS LOADING, VERFIFY REPR: jsr TXTST bne LF30E jmp MSG ; $F31D: TEST TO DIRECT-MODUS TXTST: lda $78 cmp #$02 rts ; $F322: LOAD-ROUTINE LD15: lda $D4 bne LF329 LF326: jmp LCE03 LF329: cmp #$03 beq LF326 bcc LF395 lda #$60 sta $D3 ; secundary address ldy $D1 ; length of filename bne LF33A jmp LCE03 LF33A: jsr LF40A jsr OPCHN jsr TALK lda $D3 ; secundary address jsr SECND ; send sec-address (from ac) to IEEE-bus jsr ACPTR ; read char from IEEE-bus to ac sta $FB ; save load-address lo jsr ACPTR ; read char from IEEE-bus to ac sta $FC ; save load-address hi jsr LD400 ; output loading LF355: lda #$FD and $96 sta $96 ; save status jsr STOP ; check for stop-key jsr ACPTR ; read char from IEEE-bus to ac tax lda $96 ; get status lsr lsr bcs LF355 ; read again txa ldy $9D ; flag for load:$00 or verify:$01 beq LF378 dey cmp ($FB),y beq LF37A ldx #$10 stx $96 bne LF37A LF378: sta ($FB),y LF37A: inc $FB bne LF380 inc $FC LF380: bit $96 bvc LF355 nop nop nop lda $FB sta $C9 lda $FC sta $CA jsr UNTLK ; send untalk jmp CLSEI ; close IEEE-channel LF395: jsr ZZZ jsr CSTE1 jsr LF40A LF39E: lda $D1 beq LF3AA jsr FAF bne LF3AF LF3A7: jmp FLNOT LF3AA: jsr SUFIHD beq LF3A7 LF3AF: cpx #$01 bne LF39E lda $96 and #$10 bne LF42D jsr LDAD2 jsr LD400 jmp BLCKR1 LOAD: lda #$00 sta $9D LF3C6: jsr PARS1 jsr SV60 lda #$FF LF3CE: cmp $9B bne LF3CE cmp $9B bne LF3CE jsr LD15 lda $9D bne LF42D jsr TIRQ lda $96 and #$10 beq LF3EF ldy #$00 sty $9E ldy #$60 jmp ERRMSG LF3EF: ldy #$AE jsr REPR jsr TXTST bne LF404 lda $CA sta $2B lda $C9 sta $2A jmp LC439 LF404: jsr LC5A7 jmp LC590 LF40A: jsr TXTST bne LF42D ; $F40F: OUTPUT SEARCHING OR SEARCHIG FOR SERCH: ldy #$32 jsr MSG lda $D1 beq LF42D ldy #$3D jsr MSG ; $F41D: OUTPUT FILENAME FILNM: ldy $D1 beq LF42D ldy #$00 LF423: lda ($DA),y jsr LFFD2 iny cpy $D1 bne LF423 LF42D: rts ; $F42E: OUTPUT LOADING OR VERIFY LD400: ldy #$5F lda $9D beq LF436 ldy #$6D LF436: jsr REPR ldy #$39 jmp REPR ; $F42E: GET PARAMETER FOR LOAD/SAVE/VERIFY PARS1: ldx #$00 stx $96 stx $D1 stx $D3 inx stx $D4 jsr LF50E jsr LF4FD jsr LF50E jsr LF460 stx $D4 jsr LF50E jsr LF460 stx $D3 LF45F: rts LF460: jsr PR150 jmp LD678 ; $F466: OPEN CHANNEL (FOR LOAD/SAVE) TO IEEE_BUS OPCHN: lda $D3 bmi LF45F ldy $D1 beq LF45F jsr LISTEN lda $D3 ora #$F0 jsr SECND lda $96 bpl LF481 ; $F47C: DISPLAY DEVICE NOT PRESENT DEVNT: ldy #$74 ; set offset to y-reg jmp ERRMSG ; and get error-msg LF481: lda $D1 beq LF491 ldy #$00 LF487: lda ($DA),y jsr CIOUT iny cpy $D1 bne LF487 LF491: jmp UNLSN ; $F494: LOOK FOR TAPE FILE-HEADER FAF: jsr SUFIHD beq LF4B6 ldy #$05 sty $B5 ldy #$00 sty $B4 LF4A1: cpy $D1 beq LF4B5 lda ($DA),y ldy $B5 cmp ($D6),y bne FAF inc $B4 inc $B5 ldy $B4 bne LF4A1 LF4B5: tya LF4B6: rts ; $F4B7: VERIFY-ROUTINE VER: lda #$01 sta $9D jsr LF3C6 lda $96 and #$10 beq LF4C9 ldy #$6E jmp ERRMSG LF4C9: ldy #$AA jmp MSG ; $F4CE: GET PARAMETER FROM BASIC-TEXT FOR OPEN/CLOSE PARS2: ldx #$00 stx $D3 stx $96 stx $D1 inx stx $D4 jsr NXTCH jsr LD678 stx $D2 jsr LF50E jsr LF460 stx $D4 cpx #$03 bcc LF4EF dec $D3 LF4EF: jsr LF50E jsr LF460 stx $D3 jsr LF50E jsr PR150 LF4FD: jsr LCC9F jsr LD57D sta $D1 lda $1F sta $DA lda $20 sta $DB rts LF50E: jsr L0076 bne LF515 pla pla LF515: rts ; $F516: CHECK FOR KOMMA ELSE SYNTAX ERROR PR150: jsr LCDF8 ; $F519: IF NEXT CHAR:$00 or <>':' SYNTAX ERROR NXTCH: jsr L0076 bne LF515 LF51E: jmp LCE03 ; $F521: OPEN-ROUTINE OPEN: jsr PARS2 lda $D2 beq LF51E ; $F528: FILE OPEN-ERROR, FILE EXISTS FLOPN: ldy #$0E jsr JLTLK beq ERRMSG ldx $AE ldy #$00 sty $96 cpx #$0A beq ERRMSG inc $AE lda $D2 sta $0251,x lda $D3 ora #$60 sta $D3 sta $0265,x lda $D4 sta $025B,x beq LF5A5 cmp #$03 beq LF5A5 bcc LF559 jmp OPCHN LF559: lda $D3 and #$0F bne LF58A ; $F55F: RECORD-SAVE-ROUTINE RECSAV: jsr CSTE1 jsr LF40A lda $D1 beq LF583 jsr FAF bne LF592 ; $F56E: DISPLAY FILE NOT FOUND ERROR FLNOT: ldy #$24 ; $F570: DISPLAY ERROR MSG $F000,Y ERRMSG: jsr CLALL lda #$0D jsr LFFD2 lda #$3F jsr LFFD2 jsr MSG jmp LC377 LF583: jsr SUFIHD beq FLNOT bne LF592 LF58A: jsr LF847 lda #$04 jsr TAPEH LF592: ldx $D4 lda #$BF ldy $D3 cpy #$60 beq LF5A3 ldy #$00 lda #$02 sta ($D6),y tya LF5A3: sta $BA,x LF5A5: rts ; $F5A6: LOOKS fOR NEXT TAPE FILE-HEADER SUFIHD: lda $9D pha LF5A9: jsr TRBLK ldy #$00 lda ($D6),y cmp #$05 beq LF5D5 cmp #$01 beq LF5BC cmp #$04 bne LF5A9 LF5BC: tax jsr TXTST bne LF5D3 ldy #$A3 jsr MSG ldy #$05 LF5C9: lda ($D6),y jsr LFFD2 iny cpy #$15 bne LF5C9 LF5D3: ldy #$01 LF5D5: pla sta $9D tya rts ; $F5DA: WRITES TAPE FILE-HEADER TAPEH: sta $B4 jsr ZZZ lda $FC pha lda $FB pha lda $CA pha lda $C9 pha ; $F5EB: DELETS TAPE-BUFFER DTBUF: ldy #$BF lda #$20 LF5EF: sta ($D6),y dey bne LF5EF lda $B4 sta ($D6),y iny lda $FB sta ($D6),y iny lda $FC sta ($D6),y iny lda $C9 sta ($D6),y iny lda $CA sta ($D6),y iny sty $B5 ldy #$00 sty $B4 LF613: ldy $B4 cpy $D1 beq LF625 lda ($DA),y ldy $B5 sta ($D6),y inc $B4 inc $B5 bne LF613 LF625: jsr LDAD1 lda #$69 sta $C3 jsr BLCKW1 pla sta $C9 pla sta $CA pla sta $FB pla sta $FC rts ; $F63C: GETS START-/ END-ADR FROM FILE HEADER LDAD2: jsr TIRQ ldx #$00 ldy #$01 LF643: lda ($D6),y sta $C7,x inx iny cpx #$04 bne LF643 lda $C7 sta $FB lda $C8 sta $FC rts ; $F656: SETS TAPEBUFFER START-ADR ZZZ: lda #$7A sta $D6 lda #$02 sta $D7 lda $D4 lsr bcs LF66B lda #$3A sta $D6 lda #$03 sta $D7 LF66B: rts ; $F66C: SETS SAVE START-/END-ADR FOR TAPEBUFFER LDAD1: jsr TIRQ jsr ZZZ lda $D6 sta $FB clc adc #$C0 sta $C9 lda $D7 sta $FC adc #$00 sta $CA rts ; $F684: SYS-COMMAND SYS: jsr LCC8B jsr LD6D2 jmp (L0011) ; $F68D: SET SAVE START-/END-ADR FOR BASIC-PROGRAM SV60: lda $2A sta $C9 lda $2B sta $CA lda $29 sta $FC lda $28 sta $FB rts ; $F69E: SAVE-ROUTINE SAVE: jsr PARS1 jsr SV60 LF6A4: lda $D4 bne LF6AD ; $F69E: DISPLAYS DEVICE NOT PRESENT DERR: ldy #$74 jmp ERRMSG LF6AD: cmp #$03 beq DERR bcc LF703 lda #$61 sta $D3 ldy $D1 bne LF6BE jmp LCE03 LF6BE: jsr OPCHN jsr LISTEN lda $D3 jsr SECND ldy #$00 jsr TRSA lda $C7 jsr CIOUT lda $C8 jsr CIOUT LF6D8: jsr LFCC6 beq LF6ED lda ($C7),y jsr CIOUT jsr STOP inc $C7 bne LF6D8 inc $C8 bne LF6D8 LF6ED: jsr UNLSN ; $F6F0: CLOSE IEEE-CHANNEL CLSEI: bit $D3 bmi LF76C jsr LISTEN lda $D3 and #$EF ora #$E0 jsr SECND jmp UNLSN LF703: jsr ZZZ jsr LF847 jsr TXTST bne LF716 ldy #$64 jsr MSG jsr FILNM LF716: lda #$01 jsr TAPEH jsr LF889 lda $D3 and #$02 beq LF76C lda #$05 jmp TAPEH ; $F729: INC TIME CUDTIM: inc $99 lda $99 bne LF731 inc $9A LF731: cmp #$6F bne LF73B lda $9A cmp #$02 beq LF75C LF73B: inc $8F bne LF745 inc $8E bne LF745 inc $8D LF745: ldx #$00 LF747: lda $8D,x cmp LF76D,x bcc LF762 inx cpx #$03 bne LF747 lda #$00 LF755: sta $8C,x dex bne LF755 beq LF762 LF75C: lda #$00 sta $99 sta $9A LF762: lda $E812 cmp $E812 bne LF762 sta $9B LF76C: rts LF76D: !byte $4F !byte $1A !byte $01 ; $F770: CHECKS AND SETS INPUTDEVICE (FILENUMBER IN XR) CHKIN pha txa pha tya pha lda #$00 sta $96 txa jsr JLTLK beq LF784 LF77F: ldy #$17 LF781: jmp ERRMSG LF784: jsr JZ100 lda $D4 beq LF79B cmp #$03 beq LF79B bcs LF7A0 ldx $D3 cpx #$60 beq LF79B ldy #$86 bne LF781 LF79B: sta $AF jmp LF268 LF7A0: pha jsr TALK lda $D3 bpl LF7AE jsr LF169 jmp LF7B1 LF7AE: jsr TKSA LF7B1: lda $96 bpl LF7B8 jmp DEVNT LF7B8: pla jmp LF79B ; $F7BC: CHECKS AND SETS OUTPUT-DEVICE (FILENUMBER IN XR) CKOUT: pha txa pha tya pha lda #$00 sta $96 txa jsr JLTLK bne LF77F jsr JZ100 lda $D4 bne LF7D6 ldy #$94 bne LF781 LF7D6: cmp #$03 beq LF7E6 bpl LF7EB ldx $D3 cpx #$60 bne LF7E6 ldy #$94 bne LF781 LF7E6: sta $B0 jmp LF268 LF7EB: pha jsr LISTEN lda $D3 bpl LF7F8 jsr SCATN bne LF7FB LF7F8: jsr SECND LF7FB: lda $96 bpl LF802 jmp DEVNT LF802: pla jmp LF7E6 ; $F806: TAPE-CONTROL-ROUTINE JTP20: jsr ZZZ ldx $D4 inc $BA,x ldy $BA,x cpy #$C0 rts ; $F812: DISPLAY 'PRESS PLAY ON TAPE #x' AND 'OK' CSTE1: jsr CS10 beq LF846 ldy #$41 LF819: jsr MSG ldy #$56 jsr MSG lda $D4 ora #$30 jsr LE3D8 LF828: jsr TKEY jsr CS10 bne LF828 ldy #$AA jmp MSG ; $F835: TESTS KEY-SWITCH FROM RECORDER, Z-FLAG IF PRESSED CS10: lda #$10 ldx $D4 dex beq LF83E lda #$20 LF83E: bit $E810 bne LF846 bit $E810 LF846: rts LF847: jsr CS10 beq LF846 ldy #$41 jsr MSG ldy #$4D bne LF819 ; $F855: READS BLOCK IN TAPE BUFFER (192 BYTES) TRBLK: lda #$00 sta $96 sta $9D jsr LDAD1 ; $F855: READS BLOCK FROM TAPE, VARIUOS LENGTH BLCKR1: jsr TIRQ jsr CSTE1 sei lda #$00 sta $C2 sta $CE sta $CB sta $C0 sta $C1 sta $B2 ldx $D4 dex beq LF87F lda #$90 sta $E84E bne LF882 LF87F: inc $E811 LF882: ldx #$0E bne LF89B ; $F886: WRITES BLOCK TO TAPE FROM BUFFER (192 BYTES) TWBLK: jsr LDAD1 LF889: jsr TIRQ lda #$14 sta $C3 ; $F890: WRITES BLOCK TO TAPE, VARIUOS LENGTH BLCKW1: jsr LF847 sei lda #$A0 sta $E84E ldx #$08 LF89B: jsr LFC9B ; $F89E: STOPS TAPE READ OR WRITE TSTOP: lda #$02 sta $DE jsr LFB84 dec $E813 ldx $D4 dex bne LF8B6 lda #$34 sta $E813 sta $F9 bne LF8C0 LF8B6: lda $E840 stx $FA and #$EF sta $E840 LF8C0: ldx #$FF LF8C2: ldy #$FF LF8C4: dey bne LF8C4 dex bne LF8C2 sta $E849 cli LF8CE: lda #$E6 cmp $91 beq LF8E5 jsr TKEY bit $E813 bpl LF8CE bit $E812 jsr CUDTIM jmp LF8CE LF8E5: rts ; $F8E6: TESTS IRQ-VECTOR HB=$E6, WAITS FOR I/O-FINISHING TIRQ: jsr TKEY lda #$E6 cmp $91 bne TIRQ rts ; $F8F0: TESTS FOR STOP-KEY, IF RESTORE IRQ ($E62E) TKEY: jsr STOP1 bne LF8FD jsr TEND jsr SETDV sta $0E LF8FD: jmp $C73F ; $F900: INIT TIMING FOR TAPE-INPUT TTIM: stx $CC lda $CB asl asl clc adc $CB clc adc $CC sta $CC lda #$00 bit $CB bmi LF915 rol LF915: asl $CC rol asl $CC rol tax LF91C: lda $E848 cmp #$15 bcc LF91C adc $CC sta $E844 txa adc $E849 sta $E845 cli rts ; $F900: IRQ-ROUTINE FOR TAPE-INPUT TIIRQ: ldx $E849 ldy #$FF tya sbc $E848 cpx $E849 bne TIIRQ stx $CC tax sty $E848 sty $E849 tya sbc $CC stx $CC lsr ror $CC lsr ror $CC lda $CB clc adc #$3C bit $E840 bit $E810 cmp $CC bcs LF9AC ldx $B2 beq LF969 jmp TSBYT LF969: ldx $B7 bmi LF988 ldx #$00 adc #$30 adc $CB cmp $CC bcs LF993 inx adc #$26 adc $CB cmp $CC bcs LF997 adc #$2C adc $CB cmp $CC bcc LF98B LF988: jmp LFA07 LF98B: lda $CE beq LF9AC sta $BE bne LF9AC LF993: inc $BF bcs LF999 LF997: dec $BF LF999: sec sbc #$13 sbc $CC adc $9C sta $9C lda $B9 eor #$01 sta $B9 beq LF9CB stx $D9 LF9AC: lda $CE beq LF9C8 bit $E84D bvc LF9C8 lda #$00 sta $B9 lda $B7 bpl LF9EE bmi LF988 LF9BF: ldx #$A6 jsr TTIM lda $B1 bne LF98B LF9C8: jmp LE6E4 LF9CB: lda $9C beq LF9D7 bmi LF9D5 dec $CB dec $CB LF9D5: inc $CB LF9D7: lda #$00 sta $9C cpx $D9 bne LF9EE txa bne LF98B lda $BF bmi LF9AC cmp #$10 bcc LF9AC sta $AB bcs LF9AC LF9EE: txa eor $B1 sta $B1 lda $CE beq LF9C8 dec $B7 bmi LF9BF lsr $D9 ror $DF ldx #$DA jsr TTIM jmp LE6E4 LFA07: lda $AB beq LFA0F lda $CE beq LFA16 LFA0F: lda $B7 bmi LFA16 jmp LF997 LFA16: lsr $CC lda #$93 sec sbc $CC adc $CB asl tax jsr TTIM inc $B2 lda $CE bne LFA3B lda $AB beq LFA54 sta $BE lda #$00 sta $AB lda #$C0 sta $E84E sta $CE LFA3B: lda $AB sta $CF beq LFA4A lda #$00 sta $CE lda #$40 sta $E84E LFA4A: lda $DF sta $DD lda $BE ora $BF sta $D0 LFA54: jmp LE6E4 ; $FA57: SAVES BYTES FROM TAPE TSBYT: jsr LFB84 sta $B2 ldx #$DA jsr TTIM lda $DE beq LFA67 sta $BD LFA67: lda #$0F bit $C2 bpl LFA84 lda $CF bne LFA7D ldx $DE dex bne LFA81 lda #$08 jsr LFB7F bne LFA81 LFA7D: lda #$00 sta $C2 LFA81: jmp LE6E4 LFA84: bvs LFAB7 bne LFAA0 lda $CF bne LFA81 lda $D0 bne LFA81 lda $BD lsr lda $DD bmi LFA9A bcc LFAB1 clc LFA9A: bcs LFAB1 and #$0F sta $C2 LFAA0: dec $C2 bne LFA81 lda #$40 sta $C2 jsr TRSA lda #$00 sta $C3 beq LFA81 LFAB1: lda #$80 sta $C2 bne LFA81 LFAB7: lda $CF beq LFAC5 lda #$04 jsr LFB7F lda #$00 jmp LFB46 LFAC5: jsr LFCC6 bne LFACD jmp LFB44 LFACD: ldx $BD dex beq LFAFF lda $9D beq LFAE2 ldy #$00 lda $DD cmp ($C7),y beq LFAE2 lda #$01 sta $D0 LFAE2: lda $D0 beq LFB32 ldx #$3D cpx $C0 bcc LFB2B ldx $C0 lda $C8 sta $0101,x lda $C7 sta $0100,x inx inx stx $C0 jmp LFB32 LFAFF: ldx $C1 cpx $C0 beq LFB3C lda $C7 cmp $0100,x bne LFB3C lda $C8 cmp $0101,x bne LFB3C inc $C1 inc $C1 lda $9D beq LFB27 lda $DD ldy #$00 cmp ($C7),y beq LFB3C lda #$01 sta $D0 LFB27: lda $D0 beq LFB32 LFB2B: lda #$10 jsr LFB7F bne LFB3C LFB32: lda $9D bne LFB3C lda $DD ldy #$00 sta ($C7),y LFB3C: inc $C7 bne LFB73 inc $C8 bne LFB73 LFB44: lda #$80 LFB46: sta $C2 ldx $DE dex bmi LFB4F stx $DE LFB4F: dec $BD beq TCHK lda $C0 bne LFB73 sta $DE beq LFB73 ; $FB5B: CHECKSUM-TEST TCHK: jsr TEND jsr TRSA ldy #$00 sty $C3 jsr TPARY lda $C3 eor $DD beq LFB73 lda #$20 jsr LFB7F LFB73: jmp LE6E4 ; $FB76: RESCUE SAVE-ADDRESS TRSA: lda $FC sta $C8 lda $FB sta $C7 rts LFB7F: ora $96 sta $96 rts LFB84: lda #$08 sta $B7 lda #$00 sta $B9 sta $BE sta $B1 sta $BF rts ; $FB93: WRITES BIT TO TAPE TBIT: lda $DD lsr lda #$60 bcc LFB9C LFB9A: lda #$B0 LFB9C: ldx #$00 LFB9E: sta $E848 stx $E849 lda $E840 eor #$08 sta $E840 and #$08 rts ; $FBAF: IRQ2 WRITING ON TAPE TIRQ2: sec ror $C8 bmi LFBF0 lda $BE bne LFBCA lda #$10 ldx #$01 jsr LFB9E bne LFBF0 inc $BE lda $C8 bpl LFBF0 jmp TIRQ1 LFBCA: lda $BF bne LFBD7 jsr LFB9A bne LFBF0 inc $BF bne LFBF0 LFBD7: jsr TBIT bne LFBF0 lda $B9 eor #$01 sta $B9 beq LFBF3 lda $DD eor #$01 sta $DD and #$01 eor $B1 sta $B1 LFBF0: jmp LE6E4 LFBF3: lsr $DD dec $B7 lda $B7 beq LFC38 bpl LFBF0 LFBFD: jsr LFB84 cli lda $BA beq LFC17 ldx #$00 stx $D9 dec $BA ldx $DE cpx #$02 bne LFC13 ora #$80 LFC13: sta $DD bne LFBF0 LFC17: jsr LFCC6 bcc LFC26 bne TIRQ2 inc $C8 lda $D9 sta $DD bcs LFBF0 LFC26: ldy #$00 lda ($C7),y sta $DD eor $D9 sta $D9 inc $C7 bne LFBF0 inc $C8 bne LFBF0 LFC38: lda $B1 eor #$01 sta $DD LFC3E: jmp LE6E4 ; $FC41: IRQ1 WRITING ON TAPE TIRQ1: dec $DE bne LFC48 jsr LFCA6 LFC48: lda #$50 sta $BD ldx #$08 sei jsr LFC9B bne LFC3E lda #$78 jsr LFB9C bne LFC3E dec $BD bne LFC3E jsr LFB84 dec $C3 bpl LFC3E ldx #$0A jsr LFC9B cli inc $C3 lda $DE beq LFC96 jsr TRSA ldx #$09 stx $BA bne LFBFD ; $FC7B: END TAPE-I/O, MOTOR:OFF, OLD IRQ, SCREEN:ON TEND: php sei jsr LFCA6 lda #$7F sta $E84E lda #$3C sta $E811 lda #$3D sta $E813 ldx #$0C jsr LFC9B plp rts LFC96: jsr TEND beq LFC3E LFC9B: lda $FD01,x ; get IRQ-vector sta $90 lda $FD02,x ; get IRQ-vector sta $91 rts LFCA6: lda #$3C sta $E813 lda $E840 ora #$10 sta $E840 rts ; $FCB4: 8-BIT PARITY CHECK TPARY: lda ($C7),y eor $C3 sta $C3 inc $C7 bne LFCC0 inc $C8 LFCC0: jsr LFCC6 bne TPARY rts LFCC6: lda $C8 cmp $CA bne LFCD0 lda $C7 cmp $C9 LFCD0: rts ; $FCD1: POWER ON RESET, COLD START START: ldx #$FF txs cld jsr LE1DE lda #$89 sta $94 lda #$C3 sta $95 lda #$17 sta $92 lda #$FD sta $93 lda #$F7 sta L03FA lda #$E7 sta $03FB cli lda $E810 bmi LFCFB jmp CALLE LFCFB: jmp LE116 ; $FCFE: ENTRY FOR NMI ENMI: jmp ($94) ; IRQ-VECTOR TABLE fd01: !byte $00,$00,$00,$00,$00,$00,$00,$00,$54,$fc,$b4,$fb,$2e,$e6,$31,$f9; ........T.....1. ; $FD11: MONITOR (CALL-ENTRY) CALLE: lda #$43 sta $B5 bne LFD2D lda #$42 sta $B5 cld lsr pla sta $0205 pla sta $0204 pla sta $0203 pla sta $0202 LFD2D: pla adc #$FF sta $0201 pla adc #$FF sta $0200 lda $90 sta $0208 lda $91 sta $0207 tsx stx $0206 cli jsr CRLF ldx $B5 lda #$2A jsr LE784 lda #$52 bne SO ; $FD56: MONITOR COMMAND INPUT MCMD: lda #$02 sta $77 lda #$00 sta $DE ldx #$0D lda #$2E jsr LE784 LFD65: jsr LE7EB cmp #$2E beq LFD65 cmp #$20 beq LFD65 ; $FD70: MONITOR COMMAND ANALYSIS SO: ldx #$07 LFD72: cmp $FDE0,x bne LFD82 stx $B4 lda $FDE8,x pha lda $FDF0,x pha rts LFD82: dex bpl LFD72 jmp (L03FA) ; $FD88: LOADS PROGRAM-COUNTER FROM $FB/$FC PUTP: lda $FB sta $0201 lda $FC sta $0200 rts ; $FD93: SHOWS MEMORY DN: sta $B5 ldy #$00 LFD97: jsr SPACE lda ($FB),y jsr LE775 jsr INCTMP dec $B5 bne LFD97 rts ; $FDA7: GET AND SAVE ONE BYTE ($FB/$FC) BYTE: jsr LE7B6 bcc LFDB9 ldx #$00 sta ($FB,x) cmp ($FB,x) beq LFDB9 pla pla jmp LE7F7 LFDB9: jsr INCTMP dec $B5 rts ; $FDBF: PREPARES SR..SP IN-/OUTPUT SETR: lda #$02 sta $FB lda #$02 sta $FC lda #$05 rts ; $FDCA: WRITES TWO SPACES SPAC2: jsr SPACE ; $FDCD: WRITES ONE SPACE SPACE: lda #$20 CRLF = * + 1 ; $FDD0: DISPLAYS RETURN bit $0DA9 jmp LFFD2 ; $FDD5: INC $FB/$FC-POINTER, IF 0 INC $DE INCTMP: inc $FB bne LFDDF inc $FC bne LFDDF inc $DE LFDDF: rts fde0: !byte $3a,$3b,$52,$4d,$47,$58,$4c,$53,$fe,$fe,$fe,$fe,$fe,$ff,$ff,$ff; :;RMGXLS........ fdf0: !byte $b8,$96,$22,$57,$ce,$06,$10,$10,$0d,$20,$20,$20,$20,$20,$50,$43; .."W..... PC fe00: !byte $20,$20,$49,$52,$51,$20,$20,$53,$52,$20,$41,$43,$20,$58,$52,$20; IRQ SR AC XR fe10: !byte $59,$52,$20,$53,$50 ; $FE15: MONITOR DISPLAY-ROUTINE ALTRIT: tya pha jsr CRLF pla ldx #$2E jsr LE784 jmp SPAC2 ; $FE23: MONITOR R-COMMAND DSPLYR: ldx #$00 LFE25: lda $FDF8,x jsr LFFD2 inx cpx #$1D bne LFE25 ldy #$3B jsr ALTRIT lda $0200 jsr LE775 lda $0201 jsr LE775 jsr SPACE lda $0207 jsr LE775 lda $0208 jsr LE775 jsr SETR LFE53: jsr DN beq LFE91 ; $FE58: MONITOR M-COMMAND DSPLYM: jsr LE7EB jsr LE7A7 bcc LFE94 jsr LE797 jsr LE7EB jsr LE7A7 bcc LFE94 jsr LE797 LFE6E: jsr STOP1 beq LFE91 ldx $DE bne LFE91 sec lda $FD sbc $FB lda $FE sbc $FC bcc LFE91 ldy #$3A jsr ALTRIT jsr LE76A lda #$08 jsr DN beq LFE6E LFE91: jmp MCMD LFE94: jmp LE7F7 ; $FE97: MONITOR ;-COMMAND ALTR: jsr LE7B6 jsr LE7A7 bcc LFEA2 jsr PUTP LFEA2: jsr LFFCF jsr LE7A7 bcc LFEB4 lda $FB sta $0208 lda $FC sta $0207 LFEB4: jsr SETR bne LFEC3 ; $FEB9: MONITOR :-COMMAND ALTM: jsr LE7B6 jsr LE7A7 bcc LFE94 lda #$08 LFEC3: sta $B5 LFEC5: jsr LE7EB jsr BYTE bne LFEC5 beq LFE91 ; $FECF: MONITOR G-COMMAND MGO: jsr LFFCF cmp #$0D beq LFEE2 cmp #$20 bne LFE94 jsr LE7A7 bcc LFEE2 jsr PUTP LFEE2: ldx $0206 txs sei lda $0207 sta $91 lda $0208 sta $90 lda $0200 pha lda $0201 pha lda $0202 pha lda $0203 ldx $0204 ldy $0205 rti ; $FF07: MONITOR X-COMMAND EXIT: ldx $0206 txs jmp LC389 LFF0E: jmp LE7F7 ; $FF11: MONITOR L- AND S-COMMAND LSM: ldy #$01 sty $D4 dey sty $D1 sty $9D lda #$02 sta $DB lda #$07 sta $DA LFF22: jsr LFFCF cmp #$20 beq LFF22 cmp #$0D beq LFF47 cmp #$22 LFF2F: bne LFF0E LFF31: jsr LFFCF cmp #$22 beq LFF5C cmp #$0D beq LFF47 sta ($DA),y inc $D1 iny cpy #$10 LFF43: beq LFF0E bne LFF31 LFF47: lda $B4 cmp #$06 LFF4B: bne LFF2F jsr LD15 jsr TIRQ lda $96 and #$10 LFF57: bne LFF4B jmp MCMD LFF5C: jsr LFFCF cmp #$0D beq LFF47 cmp #$2C LFF65: bne LFF57 jsr LE7B6 and #$0F LFF6C: beq LFF43 cmp #$03 beq LFF6C sta $D4 jsr LFFCF cmp #$0D beq LFF47 cmp #$2C LFF7D: bne LFF65 jsr LE7A7 jsr LE797 jsr LFFCF cmp #$2C LFF8A: bne LFF7D jsr LE7A7 lda $FB sta $C9 lda $FC sta $CA jsr LE797 LFF9A: jsr LFFCF cmp #$20 beq LFF9A cmp #$0D LFFA3: bne LFF8A lda $B4 cmp #$07 bne LFFA3 jsr LF6A4 jmp MCMD ; Copyright: September 1978 CBM ffb1: !byte $43,$2e,$20,$30,$39,$37,$38,$20,$43,$42,$4d,$20,$aa,$aa,$aa; C. 0978 CBM ... jmp OPEN jmp CLOSE jmp CHKIN jmp CKOUT jmp CLRCH LFFCF: jmp BASIN LFFD2: jmp BSOUT jmp LOAD jmp SAVE jmp VER jmp SYS jmp STOP jmp GETIN jmp CLALL jmp CUDTIM tax tax tax tax tax tax tax tax tax tax tax tax tax ; NMI nmi: !byte $FE !byte $FC ; RESET VECTOR res: !byte $D1 !byte $FC ; IRQ VECTOR irq: !byte $1B !byte $E6
Letzte Änderung: 2019-01-04 09:56:42