;------------------------------------------------
; File generated by ATARIOS2ASM
;------------------------------------------------
         OPT h-F+
;------------------------------------------------
         ORG $C000

         ;
         ; suma kontrolna pierwszej części ROM
         ;
CHSRO1   dta $76,$89,$01,$03,$85,$00,$42,$42
         dta $00,$00,$01,$03
;------------------------------------------------
         ORG $C00C

         ;
         ; inicjowanie przerwań MNI
         ;
NMIENBL  LDA #$40
         STA $D40E
         LDA $D013
         STA $03FA
         RTS
;------------------------------------------------
         ORG $C018

         ;
         ; rozpoznanie przerwania NMI
         ;
NMIFIRST BIT $D40F
         BPL *+5
         JMP ($0200)
         CLD
         PHA
         TXA
         PHA
         TYA
         PHA
         STA $D40F
         JMP ($0222)
;------------------------------------------------
         ORG $C02C

         ;
         ; skok według wektora VIMIRQ
         ;
JMPIRQV  CLD
         JMP ($0216)
;------------------------------------------------
         ORG $C030

         ;
         ; rozpoznanie przerwania IRQ
         ;
SINDRYI  PHA
         LDA $D20E
         AND #$20
         BNE *+15
         LDA #$DF
         STA $D20E
         LDA $10
         STA $D20E
         JMP ($020A)
         TXA
         PHA
         LDA $D1FF
         AND $0249
         BEQ *+5
         JMP ($0238)
         LDX #$06
         LDA $C0CF,X
         CPX #$05
         BNE *+6
         AND $10
         BEQ *+7
         BIT $D20E
         BEQ *+8
         DEX
         BPL *-17
         JMP $C0A0
         EOR #$FF
         STA $D20E
         LDA $10
         STA $D20E
         CPX #$00
         BNE *+7
         LDA $026D
         BNE *+37
         LDA $C0D7,X
         TAX
         LDA $0200,X
         STA $028C
         LDA $0201,X
         STA $028D
         PLA
         TAX
         JMP ($028C)
;------------------------------------------------
         ORG $C092

         ;
         ; przerwanie klawisza BREAK
         ;
BREAKIRQ LDA #$00
         STA $11
         STA $02FF
         STA $02F0
         STA $4D
         PLA
         RTI
         PLA
         TAX
         BIT $D302
         BPL *+8
         LDA $D300
         JMP ($0202)
         BIT $D303
         BPL *+8
         LDA $D301
         JMP ($0204)
         PLA
         STA $028C
         PLA
         PHA
         AND #$10
         BEQ *+9
         LDA $028C
         PHA
         JMP ($0206)
         LDA $028C
         PHA
;------------------------------------------------
         ORG $C0CD

         ;
         ; powrót z przerwania
         ;
PLARTI   PLA
;------------------------------------------------
         ORG $C0CE

         ;
         ; powrót z przerwania
         ;
RTI      RTI
;------------------------------------------------
         ORG $C0CF

         ;
         ; tabela masek bitowych dla SINDRYI
         ;
MASKTAB  dta $80,$40,$04,$02,$01,$08,$10,$20
;------------------------------------------------
         ORG $C0D7

         ;
         ; tabela wektorów przerwań dla SINDRYI
         ;
VECTAB   dta $36,$08,$14,$12,$10,$0E,$0C,$0A
;------------------------------------------------
         ORG $C0DF

         ;
         ; oczekiwanie na RESET
         ;
WAITRST  JMP $C0DF
;------------------------------------------------
         ORG $C0E2

         ;
         ; systemowe przerwanie synchronizacji (VBLK)
         ;
SYSVBL   INC $14
         BNE *+10
         INC $4D
         INC $13
         BNE *+4
         INC $12
         LDA #$FE
         LDX #$00
         LDY $4D
         BPL *+8
         STA $4D
         LDX $13
         LDA #$F6
         STA $4E
         STX $4F
         LDA $02C5
         EOR $4F
         AND $4E
         STA $D017
         LDX #$00
         JSR $C255
         BNE *+5
         JSR $C24F
         LDA $42
         BNE *+10
         TSX
         LDA $0104,X
         AND #$04
         BEQ *+5
         JMP $C28A
         LDA $D013
         CMP $03FA
         BNE *-74
         LDA $D40D
         STA $0235
         LDA $D40C
         STA $0234
         LDA $0231
         STA $D403
         LDA $0230
         STA $D402
         LDA $022F
         STA $D400
         LDA $026F
         STA $D01B
         LDA $026C
         BEQ *+16
         DEC $026C
         LDA #$08
         SEC
         SBC $026C
         AND #$07
         STA $D405
         LDX #$08
         STX $D01F
         CLI
         LDA $02C0,X
         EOR $4F
         AND $4E
         STA $D012,X
         DEX
         BPL *-12
         LDA $02F4
         STA $D409
         LDA $02F3
         STA $D401
         LDX #$02
         JSR $C255
         BNE *+5
         JSR $C252
         LDX #$02
         INX
         INX
         LDA $0218,X
         ORA $0219,X
         BEQ *+8
         JSR $C255
         STA $0226,X
         CPX #$08
         BNE *-18
         LDA $D20F
         AND #$04
         BEQ *+10
         LDA $02F1
         BEQ *+5
         DEC $02F1
         LDA $022B
         BEQ *+64
         LDA $D20F
         AND #$04
         BNE *+52
         DEC $022B
         BNE *+52
         LDA $026D
         BNE *+47
         LDA $02DA
         STA $022B
         LDA $D209
         CMP #$9F
         BEQ *+34
         CMP #$83
         BEQ *+30
         CMP #$84
         BEQ *+26
         CMP #$94
         BEQ *+22
         AND #$3F
         CMP #$11
         BEQ *+16
         LDA $D209
         STA $02FC
         JMP $C1F3
         LDA #$00
         STA $022B
         LDA $D300
         LSR
         LSR
         LSR
         LSR
         STA $0279
         STA $027B
         LDA $D300
         AND #$0F
         STA $0278
         STA $027A
         LDA $D010
         STA $0284
         STA $0286
         LDA $D011
         STA $0285
         STA $0287
         LDX #$03
         LDA $D200,X
         STA $0270,X
         STA $0274,X
         DEX
         BPL *-10
         STA $D20B
         LDX #$02
         LDY #$01
         LDA $0278,Y
         LSR
         LSR
         LSR
         STA $027D,X
         STA $0281,X
         LDA #$00
         ROL
         STA $027C,X
         STA $0280,X
         DEX
         DEX
         DEY
         BPL *-24
         JMP ($0224)
;------------------------------------------------
         ORG $C24F

         ;
         ; skok według wektora TIMVEC1
         ;
JMPTIM1  JMP ($0226)
;------------------------------------------------
         ORG $C252

         ;
         ; skok według wektora TIMVEC2
         ;
JMPTIM2  JMP ($0228)
;------------------------------------------------
         ORG $C255

         ;
         ; zmniejszenie licznika systemowego
         ;
DECTIM   LDY $0218,X
         BNE *+10
         LDY $0219,X
         BEQ *+18
         DEC $0219,X
         DEC $0218,X
         BNE *+10
         LDY $0219,X
         BNE *+5
         LDA #$00
         RTS
         LDA #$FF
         RTS
;------------------------------------------------
         ORG $C272

         ;
         ; ustawianie wektorów przerwania VBLK
         ;
SETVBLV  ASL
         STA $022D
         TXA
         LDX #$05
         STA $D40A
         DEX
         BNE *-1
         LDX $022D
         STA $0217,X
         TYA
         STA $0216,X
         RTS
;------------------------------------------------
         ORG $C28A

         ;
         ; zakończenie przerwania VBLK
         ;
EXITVBL  PLA
         TAY
         PLA
         TAX
         PLA
         RTI
;------------------------------------------------
         ORG $C290

         ;
         ; gorący start systemu
         ;
RESETWM  SEI
         LDA $D013
         CMP $03FA
         BNE *+49
         ROR
         BCC *+7
         JSR $C4C9
         BNE *+41
         LDA $0244
         BNE *+36
         LDA #$FF
         BNE *+34
;------------------------------------------------
         ORG $C2AA

         ;
         ; start systemu po naciśnięciu RESET
         ;
RESET    SEI
         LDX #$8C
         DEY
         BNE *-1
         DEX
         BNE *-4
         LDA $033D
         CMP #$5C
         BNE *+16
         LDA $033E
         CMP #$93
         BNE *+9
         LDA $033F
         CMP #$25
         BEQ *-54
;------------------------------------------------
         ORG $C2C8

         ;
         ; zimny start systemu
         ;
RESETCD  LDA #$00
         STA $08
         SEI
         CLD
         LDX #$FF
         TXS
         JSR $C471
         LDA #$01
         STA $01
         LDA $08
         BNE *+84
         LDA #$00
         LDY #$08
         STA $04
         STA $05
         LDA #$FF
         STA ($04),Y
         CMP ($04),Y
         BEQ *+4
         LSR $01
         LDA #$00
         STA ($04),Y
         CMP ($04),Y
         BEQ *+4
         LSR $01
         INY
         BNE *-21
         INC $05
         LDX $05
         CPX $06
         BNE *-29
         LDA #$23
         STA $0A
         LDA #$F2
         STA $0B
         LDA $D301
         AND #$7F
         STA $D301
         JSR $FF73
         BCS *+7
         JSR $FF92
         BCC *+4
         LSR $01
         LDA $D301
         ORA #$80
         STA $D301
         LDA #$FF
         STA $0244
         BNE *+36
         LDX #$00
         LDA $03EC
         BEQ *+9
         STX.W $000E
         STX.W $000F
         TXA
         STA $0200,X
         CPX #$ED
         BCS *+5
         STA $0300,X
         DEX
         BNE *-11
         LDX #$10
         STA $00,X
         INX
         BPL *-3
         LDX #$00
         LDA $D301
         AND #$02
         BEQ *+3
         INX
         STX $03F8
         LDA #$5C
         STA $033D
         LDA #$93
         STA $033E
         LDA #$25
         STA $033F
         LDA #$02
         STA $52
         LDA #$27
         STA $53
         LDA $D014
         AND #$0E
         BNE *+10
         LDA #$05
         LDX #$01
         LDY #$28
         BNE *+8
         LDA #$06
         LDX #$00
         LDY #$30
         STA $02DA
         STX $62
         STY $02D9
         LDX #$25
         LDA $C44B,X
         STA $0200,X
         DEX
         BPL *-7
         LDX #$0E
         LDA $C42E,X
         STA $031A,X
         DEX
         BPL *-7
         JSR $C535
         CLI
         LDA $01
         BNE *+23
         LDA $D301
         AND #$7F
         STA $D301
         LDA #$02
         STA $02F3
         LDA #$E0
         STA $02F4
;------------------------------------------------
         ORG $C3C1

         ;
         ; skok do testu komputera
         ;
GOMEMTST JMP $5000
         LDX #$00
         STX $06
         LDX $02E4
         CPX #$B0
         BCS *+15
         LDX $BFFC
         BNE *+10
         INC $06
         JSR $C4C9
         JSR $C429
         LDA #$03
         LDX #$00
         STA $0342,X
         LDA #$48
         STA $0344,X
         LDA #$C4
         STA $0345,X
         LDA #$0C
         STA $034A,X
         JSR $E456
         BPL *+5
         JMP $C2AA
         INX
         BNE *-1
         INY
         BPL *-4
         JSR $C66E
         LDA $06
         BEQ *+8
         LDA $BFFD
         ROR
         BCC *+8
         JSR $C58B
         JSR $E739
         LDA #$00
         STA $0244
         LDA $06
         BEQ *+12
         LDA $BFFD
         AND #$04
         BEQ *+5
;------------------------------------------------
         ORG $C423

         ;
         ; skok według wektora CARTRUN
         ;
COLDCART JMP ($BFFA)
;------------------------------------------------
         ORG $C426

         ;
         ; skok według wektora DOSVEC
         ;
DOSVECC  JMP ($000A)
;------------------------------------------------
         ORG $C429

         ;
         ; skok według wektora CARTINI
         ;
INITCART JMP ($BFFE)
;------------------------------------------------
         ORG $C42C

         ;
         ; rozkazy CLC i RTS
         ;
CLCRTS   CLC
         RTS
;------------------------------------------------
         ORG $C42E

         ;
         ; tabela wartości dla HATABS
         ;
INIT31A  dta $50,$30,$E4,$43,$40,$E4,$45,$00
         dta $E4,$53,$10,$E4,$4B,$20,$E4
;------------------------------------------------
         ORG $C43D

         ;
         ; meldunek błędu "BOOT ERROR"
         ;
DERRMSG  dta $42,$4F,$4F,$54,$20,$45,$52,$52
         dta $4F,$52,$9B
;------------------------------------------------
         ORG $C448

         ;
         ; nazwa edytora "E:"
         ;
NAME     dta $45,$3A,$9B
;------------------------------------------------
         ORG $C44B

         ;
         ; tabela wartości dla wektorów OS
         ;
INIT200  dta $CE,$C0,$CD,$C0,$CD,$C0,$CD,$C0
         dta $19,$FC,$2C,$EB,$AD,$EA,$EC,$EA
         dta $CD,$C0,$CD,$C0,$CD,$C0,$30,$C0
         dta $00,$00,$00,$00,$00,$00,$00,$00
         dta $00,$00,$E2,$C0,$8A,$C2
;------------------------------------------------
         ORG $C471

         ;
         ; sprawdzenie cartridge'a
         ;
CARTGO   LDA $D013
         ROR
         BCC *+15
         LDA $BFFC
         BNE *+10
         LDA $BFFD
         BPL *+5
         JMP ($BFFE)
         JSR $C4DA
         LDA $D301
         ORA #$02
         STA $D301
         LDA $08
         BEQ *+9
         LDA $03F8
         BNE *+19
         BEQ *+9
         LDA $D01F
         AND #$04
         BEQ *+10
         LDA $D301
         AND #$FD
         STA $D301
;------------------------------------------------
         ORG $C4A9

         ;
         ; sprawdzenie wielkości RAM
         ;
GRAMHI   LDA #$00
         TAY
         STA $05
         LDA #$28
         STA $06
         LDA ($05),Y
         EOR #$FF
         STA ($05),Y
         CMP ($05),Y
         BNE *+14
         EOR #$FF
         STA ($05),Y
         CMP ($05),Y
         BNE *+6
         INC $06
         BNE *-20
         RTS
;------------------------------------------------
         ORG $C4C9

         ;
         ; sprawdzenie cartridge'a
         ;
NEWCART  LDA #$00
         TAX
         CLC
         ADC $BFF0,X
         INX
         BNE *-4
         CMP $03EB
         STA $03EB
         RTS
;------------------------------------------------
         ORG $C4DA

         ;
         ; inicjowanie portów układów I/O
         ;
IOPORTIN LDA #$00
         TAX
         STA $D303
         STA $D000,X
         STA $D400,X
         STA $D200,X
         CPX #$01
         BEQ *+5
         STA $D300,X
         INX
         BNE *-17
         LDA #$3C
         STA $D303
         LDA #$FF
         STA $D301
         LDA #$38
         STA $D302
         STA $D303
         LDA #$00
         STA $D300
         LDA #$FF
         STA $D301
         LDA #$3C
         STA $D302
         STA $D303
         LDA $D301
         LDA $D300
         LDA #$22
         STA $D20F
         LDA #$A0
         STA $D205
         STA $D207
         LDA #$28
         STA $D208
         LDA #$FF
         STA $D20D
         RTS
;------------------------------------------------
         ORG $C535

         ;
         ; inicjowanie systemu komputerowego
         ;
SYSINIT  DEC $11
         LDA #$92
         STA $0236
         LDA #$C0
         STA $0237
         LDA $06
         STA $02E4
         STA $02E6
         LDA #$00
         STA $02E5
         LDA #$00
         STA $02E7
         LDA #$07
         STA $02E8
         JSR $E40C
         JSR $E41C
         JSR $E42C
         JSR $E43C
         JSR $E44C
         JSR $E46E
         JSR $E465
         JSR $E46B
         JSR $E450
         LDA #$6E
         STA $0238
         LDA #$C9
         STA $0239
         JSR $E49B
         LDA $D01F
         AND #$01
         EOR #$01
         STA $03E9
         RTS
;------------------------------------------------
         ORG $C58B

         ;
         ; wstępny odczyt z dyskietki
         ;
BOOT     LDA $08
         BEQ *+11
         LDA $09
         AND #$01
         BEQ *+53
         JMP $C63B
         LDA #$01
         STA $0301
         LDA #$53
         STA $0302
         JSR $E453
         BMI *+35
         LDA #$00
         STA $030B
         LDA #$01
         STA $030A
         LDA #$00
         STA $0304
         LDA #$04
         STA $0305
;------------------------------------------------
         ORG $C5BB

         ;
         ; wstępny odczyt przy zimnym starcie
         ;
BLOCK1   JSR $C659
         BPL *+11
         JSR $C63E
         LDA $03EA
         BEQ *-31
         RTS
         LDX #$03
         LDA $0400,X
         STA $0240,X
         DEX
         BPL *-7
         LDA $0242
         STA $04
         LDA $0243
         STA $05
         LDA $0404
         STA $0C
         LDA $0405
         STA $0D
         LDY #$7F
         LDA $0400,Y
         STA ($04),Y
         DEY
         BPL *-6
         CLC
         LDA $04
         ADC #$80
         STA $04
         LDA $05
         ADC #$00
         STA $05
         DEC $0241
         BEQ *+20
         INC $030A
         JSR $C659
         BPL *-34
         JSR $C63E
         LDA $03EA
         BNE *-82
         BEQ *-13
         LDA $03EA
         BEQ *+5
         JSR $C659
         JSR $C629
         BCS *-97
         JSR $C63B
         INC $09
         RTS
;------------------------------------------------
         ORG $C629

         ;
         ; odczyt adresu inicjowania
         ;
BLOAD    CLC
         LDA $0242
         ADC #$06
         STA $04
         LDA $0243
         ADC #$00
         STA $05
         JMP ($0004)
;------------------------------------------------
         ORG $C63B

         ;
         ; skok według wektora DOSINI
         ;
DOSINITC JMP ($000C)
;------------------------------------------------
         ORG $C63E

         ;
         ; wyświetlenie meldunku błędu
         ;
DRDERR   LDX #$3D
         LDY #$C4
;------------------------------------------------
         ORG $C642

         ;
         ; wyświetlenie linii tekstu
         ;
PUTLINE  TXA
         LDX #$00
         STA $0344,X
         TYA
         STA $0345,X
         LDA #$09
         STA $0342,X
         LDA #$FF
         STA $0348,X
         JMP $E456
;------------------------------------------------
         ORG $C659

         ;
         ; odczyt bloku danych z urządzenia
         ;
GETBLK   LDA $03EA
         BEQ *+5
         JMP $E47A
         LDA #$52
         STA $0302
         LDA #$01
         STA $0301
         JMP $E453
;------------------------------------------------
         ORG $C66E

         ;
         ; wstępny odczyt z kasety
         ;
CASBOOT  LDA $08
         BEQ *+11
         LDA $09
         AND #$02
         BEQ *+41
         JMP $C6A0
         LDA $03E9
         BEQ *+33
         LDA #$80
         STA $3E
         INC $03EA
         JSR $E47D
         JSR $C5BB
         LDA #$00
         STA $03EA
         STA $03E9
         ASL $09
         LDA $0C
         STA $02
         LDA $0D
         STA $03
         RTS
;------------------------------------------------
         ORG $C6A0

         ;
         ; skok według wektora CASINI
         ;
CASINITC JMP ($0002)
;------------------------------------------------
         ORG $C6A3

         ;
         ; inicjowanie obsługi stacji dysków
         ;
DSKINIT  LDA #$A0
         STA $0246
         LDA #$80
         STA $02D5
         LDA #$00
         STA $02D6
         RTS
;------------------------------------------------
         ORG $C6B3

         ;
         ; główna procedura dyskowa
         ;
DSKINT   LDA #$31
         STA $0300
         LDA $0246
         LDX $0302
         CPX #$21
         BEQ *+4
         LDA #$07
         STA $0306
         LDX #$40
         LDA $0302
         CMP #$50
         BEQ *+6
         CMP #$57
         BNE *+4
         LDX #$80
         CMP #$53
         BNE *+18
         LDA #$EA
         STA $0304
         LDA #$02
         STA $0305
         LDY #$04
         LDA #$00
         BEQ *+8
         LDY $02D5
         LDA $02D6
         STX $0303
         STY $0308
         STA $0309
         JSR $E459
         BPL *+3
         RTS
         LDA $0302
         CMP #$53
         BNE *+12
         JSR $C73A
         LDY #$02
         LDA ($15),Y
         STA $0246
         LDA $0302
         CMP #$21
         BNE *+33
         JSR $C73A
         LDY #$FE
         INY
         INY
         LDA ($15),Y
         CMP #$FF
         BNE *-6
         INY
         LDA ($15),Y
         INY
         CMP #$FF
         BNE *-12
         DEY
         DEY
         STY $0308
         LDA #$00
         STA $0309
         LDY $0303
         RTS
;------------------------------------------------
         ORG $C73A

         ;
         ; przepisanie adresu bufora dyskowego
         ;
PUTADR   LDA $0304
         STA $15
         LDA $0305
         STA $16
         RTS
;------------------------------------------------
         ORG $C745

         ;
         ; odczyt rekordu z nowego urządzenia
         ;
LOADER   LDX #$05
         LDA #$00
         STA $02C9,X
         DEX
         BPL *-6
         LDA #$00
         STA $0233
         JSR $C7CF
         LDY #$9C
         BCS *+59
         STA $0288
         JSR $C7CF
         LDY #$9C
         BCS *+49
         STA $0245
         LDA $0288
         CMP #$0B
         BEQ *+40
         ROL
         TAX
         LDA $C8E4,X
         STA $02C9
         LDA $C8E5,X
         STA $02CA
         LDA $0245
         CMP $0233
         BEQ *-52
         JSR $C7CF
         LDY #$9C
         BCS *+10
         JSR $C7D2
         INC $0233
         BNE *-21
         RTS
;------------------------------------------------
         ORG $C795

         ;
         ; zakończenie odczytu z nowego urządzenia
         ;
HENDRT   JSR $C7CF
         LDY #$9C
         BCS *+46
         STA $02C9
         JSR $C7CF
         LDY #$9C
         BCS *+36
         STA $02CA
         LDA $0245
         CMP #$01
         BEQ *+24
         BCC *+25
         CLC
         LDA $02C9
         ADC $02D1
         TAY
         LDA $02CA
         ADC $02D2
         STY $02C9
         STA $02CA
         LDY #$01
         RTS
         LDY #$00
         LDA #$00
         BEQ *-13
         JMP ($02CF)
         dta $6C,$C9,$02
;------------------------------------------------
         ORG $C7D5

         ;
         ; odczyt znaku z nowego urządzenia
         ;
PUTCHR   LDY $0233
         CPY #$01
         BEQ *+12
         BCS *+117
         STA $024A
         STA $028E
         BCC *+108
         STA $024B
         STA $028F
         LDX #$00
         LDA $0288
         BEQ *+8
         CMP #$0A
         BEQ *+23
         LDX #$02
         CLC
         LDA $024A
         ADC $02D1,X
         STA $028E
         LDA $024B
         ADC $02D2,X
         STA $028F
         CLC
         LDA $028E
         ADC $0245
         PHA
         LDA #$00
         ADC $028F
         TAY
         PLA
         SEC
         SBC #$02
         BCS *+3
         DEY
         PHA
         TYA
         CMP $02CC,X
         PLA
         BCC *+18
         BNE *+7
         CMP $02CB,X
         BCC *+11
         STA $02CB,X
         PHA
         TYA
         STA $02CC,X
         PLA
         LDX $0288
         CPX #$01
         BEQ *+18
         CPY $02E6
         BCC *+13
         BNE *+7
         CMP $02E5
         BCC *+6
         PLA
         PLA
         LDY #$9D
         RTS
         SEC
         PHA
         LDA $0233
         SBC #$02
         CLC
         ADC $028E
         STA $36
         LDA #$00
         ADC $028F
         STA $37
         PLA
         LDY #$00
         STA ($36),Y
         JMP $C850
;------------------------------------------------
         ORG $C86D

         ;
         ; obliczanie adresu wczytywania
         ;
ADD28E   CLC
         ADC $028E
         STA $36
         LDA #$00
         ADC $028F
         STA $37
         LDY #$00
         LDA ($36),Y
         CLC
         ADC $02D1
         STA ($36),Y
         INC $36
         BNE *+4
         INC $37
         LDA ($36),Y
         ADC $02D2
         STA ($36),Y
         RTS
;------------------------------------------------
         ORG $C892

         ;
         ; obliczanie adresu do zapisu i odczytu
         ;
ADDWRD   LDX #$00
         LDY $0288
         CPY #$04
         BCC *+4
         LDX #$02
         CLC
         ADC $028E
         STA $36
         LDA #$00
         ADC $028F
         STA $37
         LDY #$00
         LDA ($36),Y
         CLC
         ADC $02D1,X
         STA ($36),Y
         RTS
;------------------------------------------------
         ORG $C8B5

         ;
         ; obliczanie adresu do odczytu
         ;
ADDGET   PHA
         LDA $0233
         ROR
         PLA
         BCS *+23
         CLC
         ADC $028E
         STA $36
         LDA #$00
         ADC $028F
         STA $37
         LDY #$00
         LDA ($36),Y
         STA $0288
         RTS
         CLC
         ADC $02D1
         LDA #$00
         ADC $02D2
         ADC $0288
         LDY #$00
         STA ($36),Y
         BEQ *-17
;------------------------------------------------
         ORG $C8E4

         ;
         ; tabela wektorów nowych urządzeń
         ;
NEWVEC   CMP $C7,X
         CMP $C7,X
         DTA $92
         dta $C8,$92,$C8,$92,$C8,$92,$C8,$6D
         dta $C8,$6D,$C8,$B5,$C8,$B5,$C8,$D5
         dta $C7,$95,$C7
;------------------------------------------------
         ORG $C8FC

         ;
         ; wywołanie testu komputera
         ;
SWITROM  LDA #$FF
         STA $0244
         LDA $D301
         AND #$7F
         STA $D301
         JMP $E483
;------------------------------------------------
         ORG $C90C

         ;
         ; inicjowanie nowych urządzeń
         ;
NEWINIT  LDA #$01
         STA $0248
         LDA $0248
         STA $D1FF
         LDA $D803
         CMP #$80
         BNE *+12
         LDA $D80B
         CMP #$91
         BNE *+5
         JSR $D819
         ASL $0248
         BNE *-26
         LDA #$00
         STA $D1FF
         RTS
;------------------------------------------------
         ORG $C933

         ;
         ; wstępna procedura złącza szeregowego
         ;
SIOINT   LDA #$01
         STA.W $0042
         LDA $0301
         PHA
         LDA $0247
         BEQ *+28
         LDX #$08
         JSR $C9AF
         BEQ *+21
         TXA
         PHA
         JSR $D805
         PLA
         TAX
         BCC *-12
         LDA #$00
         STA $0248
         STA $D1FF
         BEQ *+5
         JSR $E971
         PLA
         STA $0301
         LDA #$00
         STA.W $0042
         STY $0303
         LDY $0303
         RTS
;------------------------------------------------
         ORG $C96E

         ;
         ; przerwanie IRQ nowego urządzenia
         ;
NEWIOREQ LDX #$08
         ROR
         BCS *+5
         DEX
         BNE *-4
         LDA $0248
         PHA
         LDA $CA20,X
         STA $0248
         STA $D1FF
         JSR $D808
         PLA
         STA $0248
         STA $D1FF
         PLA
         TAX
         PLA
         RTI
;------------------------------------------------
         ORG $C991

         ;
         ; tabela procedur I/O nowych urządzeń
         ;
NWDVC    dta $A0,$01,$4C,$DC,$C9,$A0,$03,$4C
         dta $DC,$C9,$A0,$05,$4C,$DC,$C9,$A0
         dta $07,$4C,$DC,$C9,$A0,$09,$4C,$DC
         dta $C9,$A0,$0B,$4C,$DC,$C9
;------------------------------------------------
         ORG $C9AF

         ;
         ; odszukanie nowego urządzenia do operacji I/O
         ;
GETLOW   DEX
         BPL *+11
         LDA #$00
         STA $0248
         STA $D1FF
         RTS
         LDA $0247
         AND $CA21,X
         BEQ *-18
         STA $0248
         STA $D1FF
         RTS
;------------------------------------------------
         ORG $C9CA

         ;
         ; wywołanie procedury I/O nowego urządzenia
         ;
NEWPER   LDA $D80D,Y
         PHA
         DEY
         LDA $D80D,Y
         PHA
         LDA $024C
         LDX $024D
         LDY #$92
         RTS
;------------------------------------------------
         ORG $C9DC

         ;
         ; wybór i uaktywnienie nowego urządzenia
         ;
CHKNWP   STA $024C
         STX $024D
         LDA.W $0042
         PHA
         LDA #$01
         STA.W $0042
         LDX #$08
         JSR $C9AF
         BEQ *+19
         TXA
         PHA
         TYA
         PHA
         JSR $C9CA
         BCC *+34
         STA $024C
         PLA
         PLA
         JMP $CA05
         LDY #$82
         LDA #$00
         STA $0248
         STA $D1FF
         PLA
         STA.W $0042
         LDA $024C
         STY $024D
         LDY $024D
         RTS
         PLA
         TAY
         PLA
         TAX
         BCC *-50
;------------------------------------------------
         ORG $CA21

         ;
         ; maski bitowe dla NEWIOREQ i GETLOW
         ;
BITMASK  DTA $80
         dta $40,$20,$10,$08,$04,$02,$01
;------------------------------------------------
         ORG $CA29

         ;
         ; przygotowanie operacji I/O nowego urządzenia
         ;
PRPLNK   LDX.W $002E
         LDA $034D,X
         JSR $E7DE
         BCS *+34
         CLC
         JSR $E89E
         BCS *+28
         LDX.W $002E
         LDA $034C,X
         JSR $E716
         BCS *+17
         LDX.W $002E
         STA $0340,X
         STA $20
         LDA #$03
         STA $17
         JMP $E55C
         JMP $E510
         dta $00,$13,$16,$CD,$E0,$E4,$E6,$25
         dta $E7,$EA,$00,$00,$2D,$25,$2D,$2F
         dta $32,$39,$00,$34,$25,$33,$34,$00
         dta $00,$00,$32,$2F,$2D,$32,$21,$2D
         dta $00,$00,$2B,$25,$39,$22,$2F,$21
         dta $32,$24,$00,$34,$25,$33,$34,$A8
         dta $00,$00,$B3,$00,$00,$F3,$00,$00
         dta $AF,$00,$00,$B2,$00,$00,$00,$5B
         dta $00,$11,$00,$12,$00,$13,$00,$14
         dta $00,$15,$00,$16,$00,$17,$00,$18
         dta $00,$19,$00,$10,$00,$1C,$00,$1E
         dta $00,$A4,$00,$A2,$00,$00,$00,$FF
         dta $FF,$00,$31,$00,$37,$00,$25,$00
         dta $32,$00,$34,$00,$39,$00,$35,$00
         dta $29,$00,$2F,$00,$30,$00,$0D,$00
         dta $1D,$00,$B2,$B4,$00,$00,$00,$80
         dta $DC,$80,$00,$21,$00,$33,$00,$24
         dta $00,$26,$00,$27,$00,$28,$00,$2A
         dta $00,$2B,$00,$2C,$00,$1B,$00,$0B
         dta $00,$0A,$00,$A3,$00,$00,$00,$80
         dta $B3,$A8,$80,$00,$3A,$00,$38,$00
         dta $23,$00,$36,$00,$22,$00,$2E,$00
         dta $2D,$00,$0C,$00,$0E,$00,$0F,$00
         dta $B3,$A8,$00,$48,$00,$00,$00,$00
         dta $00,$00,$00,$00,$80,$B3,$80,$B0
         dta $80,$A1,$80,$A3,$80,$A5,$80,$80
         dta $80,$A2,$80,$A1,$80,$B2,$80,$00
         dta $33,$00,$30,$00,$21,$00,$23,$00
         dta $25,$00,$00,$00,$22,$00,$21,$00
         dta $32,$00,$00,$33,$28,$00,$33,$28
         dta $22,$00,$5C,$00,$36,$2F,$29,$23
         dta $25,$00,$03,$00,$00,$00,$00
;------------------------------------------------
         ORG $CB56

         ;
         ; obliczenie sumy kontrolnej listy liniowej
         ;
CHCKFF   LDY #$11
         LDA #$00
         CLC
         ADC ($4A),Y
         DEY
         BPL *-3
         ADC #$00
         EOR #$FF
         RTS
         dta $00,$00,$00,$00,$00,$00,$00,$00
         dta $00,$00,$00,$00,$00,$00,$00,$00
         dta $00,$00,$00,$00,$00,$00,$00,$00
         dta $00,$00,$00,$00,$00,$00,$00,$00
         dta $00,$00,$00,$00,$00,$00,$00,$00
         dta $00,$00,$00,$00,$00,$00,$00,$00
         dta $00,$00,$00,$00,$00,$00,$00,$00
         dta $00,$00,$00,$00,$00,$00,$00,$00
         dta $00,$00,$00,$00,$00,$00,$00,$00
         dta $00,$00,$00,$00,$00,$00,$00,$00
         dta $00,$00,$00,$00,$00,$00,$00,$00
         dta $00,$00,$00,$00,$00,$00,$00,$00
         dta $00,$00,$00,$00,$00,$00,$00,$00
         dta $00,$00,$00,$00,$00,$00,$00,$00
         dta $00,$00,$00,$00,$00,$00,$00,$00
         dta $00,$00,$00,$00,$00,$00,$00,$00
         dta $00,$00,$00,$00,$00,$00,$00,$00
         dta $00,$00,$00,$00,$00,$00,$00,$00
         dta $00,$00,$00,$00,$00,$00,$00,$00
         dta $00,$00,$00
;------------------------------------------------
         ORG $CC00

         ;
         ; zestaw znaków międzynarodowych
         ;
CHARSET2 BRK
         dta $00,$00,$00,$00,$00,$00,$00,$00
         dta $18,$18,$18,$18,$00,$18,$00,$00
         dta $66,$66,$66,$00,$00,$00,$00,$00
         dta $66,$FF,$66,$66,$FF,$66,$00,$18
         dta $3E,$60,$3C,$06,$7C,$18,$00,$00
         dta $66,$6C,$18,$30,$66,$46,$00,$1C
         dta $36,$1C,$38,$6F,$66,$3B,$00,$00
         dta $18,$18,$18,$00,$00,$00,$00,$00
         dta $0E,$1C,$18,$18,$1C,$0E,$00,$00
         dta $70,$38,$18,$18,$38,$70,$00,$00
         dta $66,$3C,$FF,$3C,$66,$00,$00,$00
         dta $18,$18,$7E,$18,$18,$00,$00,$00
         dta $00,$00,$00,$00,$18,$18,$30,$00
         dta $00,$00,$7E,$00,$00,$00,$00,$00
         dta $00,$00,$00,$00,$18,$18,$00,$00
         dta $06,$0C,$18,$30,$60,$40,$00,$00
         dta $3C,$66,$6E,$76,$66,$3C,$00,$00
         dta $18,$38,$18,$18,$18,$7E,$00,$00
         dta $3C,$66,$0C,$18,$30,$7E,$00,$00
         dta $7E,$0C,$18,$0C,$66,$3C,$00,$00
         dta $0C,$1C,$3C,$6C,$7E,$0C,$00,$00
         dta $7E,$60,$7C,$06,$66,$3C,$00,$00
         dta $3C,$60,$7C,$66,$66,$3C,$00,$00
         dta $7E,$06,$0C,$18,$30,$30,$00,$00
         dta $3C,$66,$3C,$66,$66,$3C,$00,$00
         dta $3C,$66,$3E,$06,$0C,$38,$00,$00
         dta $00,$18,$18,$00,$18,$18,$00,$00
         dta $00,$18,$18,$00,$18,$18,$30,$06
         dta $0C,$18,$30,$18,$0C,$06,$00,$00
         dta $00,$7E,$00,$00,$7E,$00,$00,$60
         dta $30,$18,$0C,$18,$30,$60,$00,$00
         dta $3C,$66,$0C,$18,$00,$18,$00,$00
         dta $3C,$66,$6E,$6E,$60,$3E,$00,$00
         dta $18,$3C,$66,$66,$7E,$66,$00,$00
         dta $7C,$66,$7C,$66,$66,$7C,$00,$00
         dta $3C,$66,$60,$60,$66,$3C,$00,$00
         dta $78,$6C,$66,$66,$6C,$78,$00,$00
         dta $7E,$60,$7C,$60,$60,$7E,$00,$00
         dta $7E,$60,$7C,$60,$60,$60,$00,$00
         dta $3E,$60,$60,$6E,$66,$3E,$00,$00
         dta $66,$66,$7E,$66,$66,$66,$00,$00
         dta $7E,$18,$18,$18,$18,$7E,$00,$00
         dta $06,$06,$06,$06,$66,$3C,$00,$00
         dta $66,$6C,$78,$78,$6C,$66,$00,$00
         dta $60,$60,$60,$60,$60,$7E,$00,$00
         dta $63,$77,$7F,$6B,$63,$63,$00,$00
         dta $66,$76,$7E,$7E,$6E,$66,$00,$00
         dta $3C,$66,$66,$66,$66,$3C,$00,$00
         dta $7C,$66,$66,$7C,$60,$60,$00,$00
         dta $3C,$66,$66,$66,$6C,$36,$00,$00
         dta $7C,$66,$66,$7C,$6C,$66,$00,$00
         dta $3C,$60,$3C,$06,$06,$3C,$00,$00
         dta $7E,$18,$18,$18,$18,$18,$00,$00
         dta $66,$66,$66,$66,$66,$7E,$00,$00
         dta $66,$66,$66,$66,$3C,$18,$00,$00
         dta $63,$63,$6B,$7F,$77,$63,$00,$00
         dta $66,$66,$3C,$3C,$66,$66,$00,$00
         dta $66,$66,$3C,$18,$18,$18,$00,$00
         dta $7E,$0C,$18,$30,$60,$7E,$00,$00
         dta $1E,$18,$18,$18,$18,$1E,$00,$00
         dta $40,$60,$30,$18,$0C,$06,$00,$00
         dta $78,$18,$18,$18,$18,$78,$00,$00
         dta $08,$1C,$36,$63,$00,$00,$00,$00
         dta $00,$00,$00,$00,$00,$FF,$00,$0C
         dta $18,$3C,$06,$3E,$66,$3E,$00,$30
         dta $18,$00,$66,$66,$66,$3E,$00,$36
         dta $6C,$00,$76,$76,$7E,$6E,$00,$0C
         dta $18,$7E,$60,$7C,$60,$7E,$00,$00
         dta $00,$3C,$60,$60,$3C,$18,$30,$3C
         dta $66,$00,$3C,$66,$66,$3C,$00,$30
         dta $18,$00,$3C,$66,$66,$3C,$00,$30
         dta $18,$00,$38,$18,$18,$3C,$00,$1C
         dta $30,$30,$78,$30,$30,$7E,$00,$00
         dta $66,$00,$38,$18,$18,$3C,$00,$00
         dta $66,$00,$66,$66,$66,$3E,$00,$36
         dta $00,$3C,$06,$3E,$66,$3E,$00,$66
         dta $00,$3C,$66,$66,$66,$3C,$00,$0C
         dta $18,$00,$66,$66,$66,$3E,$00,$0C
         dta $18,$00,$3C,$66,$66,$3C,$00,$00
         dta $66,$00,$3C,$66,$66,$3C,$00,$66
         dta $00,$66,$66,$66,$66,$7E,$00,$3C
         dta $66,$1C,$06,$3E,$66,$3E,$00,$3C
         dta $66,$00,$66,$66,$66,$3E,$00,$3C
         dta $66,$00,$38,$18,$18,$3C,$00,$0C
         dta $18,$3C,$66,$7E,$60,$3C,$00,$30
         dta $18,$3C,$66,$7E,$60,$3C,$00,$36
         dta $6C,$00,$7C,$66,$66,$66,$00,$3C
         dta $C3,$3C,$66,$7E,$60,$3C,$00,$18
         dta $00,$3C,$06,$3E,$66,$3E,$00,$30
         dta $18,$3C,$06,$3E,$66,$3E,$00,$18
         dta $00,$18,$3C,$66,$7E,$66,$00,$78
         dta $60,$78,$60,$7E,$18,$1E,$00,$00
         dta $18,$3C,$7E,$18,$18,$18,$00,$00
         dta $18,$18,$18,$7E,$3C,$18,$00,$00
         dta $18,$30,$7E,$30,$18,$00,$00,$00
         dta $18,$0C,$7E,$0C,$18,$00,$00,$18
         dta $00,$18,$18,$18,$18,$18,$00,$00
         dta $00,$3C,$06,$3E,$66,$3E,$00,$00
         dta $60,$60,$7C,$66,$66,$7C,$00,$00
         dta $00,$3C,$60,$60,$60,$3C,$00,$00
         dta $06,$06,$3E,$66,$66,$3E,$00,$00
         dta $00,$3C,$66,$7E,$60,$3C,$00,$00
         dta $0E,$18,$3E,$18,$18,$18,$00,$00
         dta $00,$3E,$66,$66,$3E,$06,$7C,$00
         dta $60,$60,$7C,$66,$66,$66,$00,$00
         dta $18,$00,$38,$18,$18,$3C,$00,$00
         dta $06,$00,$06,$06,$06,$06,$3C,$00
         dta $60,$60,$6C,$78,$6C,$66,$00,$00
         dta $38,$18,$18,$18,$18,$3C,$00,$00
         dta $00,$66,$7F,$7F,$6B,$63,$00,$00
         dta $00,$7C,$66,$66,$66,$66,$00,$00
         dta $00,$3C,$66,$66,$66,$3C,$00,$00
         dta $00,$7C,$66,$66,$7C,$60,$60,$00
         dta $00,$3E,$66,$66,$3E,$06,$06,$00
         dta $00,$7C,$66,$60,$60,$60,$00,$00
         dta $00,$3E,$60,$3C,$06,$7C,$00,$00
         dta $18,$7E,$18,$18,$18,$0E,$00,$00
         dta $00,$66,$66,$66,$66,$3E,$00,$00
         dta $00,$66,$66,$66,$3C,$18,$00,$00
         dta $00,$63,$6B,$7F,$3E,$36,$00,$00
         dta $00,$66,$3C,$18,$3C,$66,$00,$00
         dta $00,$66,$66,$66,$3E,$0C,$78,$00
         dta $00,$7E,$0C,$18,$30,$7E,$00,$66
         dta $66,$18,$3C,$66,$7E,$66,$00,$18
         dta $18,$18,$18,$18,$18,$18,$18,$00
         dta $7E,$78,$7C,$6E,$66,$06,$00,$08
         dta $18,$38,$78,$38,$18,$08,$00,$10
         dta $18,$1C,$1E,$1C,$18,$10,$00,$20
         dta $83,$50,$4C,$8B,$52,$20,$83,$50
         dta $A9,$00,$85,$80,$85,$81,$85,$82
         dta $8D,$08,$D2,$A9,$03,$8D,$0F,$D2
         dta $20,$8F,$55,$A9,$40,$8D,$0E,$D4
         dta $A2,$00,$20,$79,$57,$A2,$34,$A0
         dta $51,$20,$9B,$50,$A9,$CD,$8D,$00
         dta $02,$A9,$50,$8D,$01,$02,$A2,$0C
         dta $A9,$AA,$20,$30,$57,$A2,$00,$8E
         dta $0A,$D4,$E8,$D0,$FA,$AD,$0B,$D4
         dta $C9,$18,$B0,$F9,$A9,$10,$85,$87
         dta $A9,$C0,$8D,$0E,$D4,$AD,$1F,$D0
         dta $29,$01,$D0,$F9,$A9,$FF,$8D,$FC
         dta $02,$A5,$86,$29,$0F,$C9,$01,$F0
         dta $10,$C9,$02,$F0,$0F,$C9,$04,$F0
         dta $0E,$A9,$88,$85,$86,$A9,$FF,$85
         dta $82,$4C,$8B,$52,$4C,$9E,$55,$4C
         dta $A9,$54,$A9,$11,$85,$86,$A9,$21
         dta $8D,$2F,$02,$A9,$C0,$8D,$0E,$D4
         dta $A9,$41,$85,$83,$A9,$FF,$8D,$FC
         dta $02,$60,$85,$8A,$98,$48,$8A,$48
         dta $A9,$00,$8D,$2F,$02,$8D,$DC,$02
         dta $A9,$3E,$8D,$00,$02,$A9,$54,$8D
         dta $01,$02,$A2,$00,$8A,$20,$30,$57
         dta $68,$AA,$68,$A8,$8E,$30,$02,$86
         dta $84,$8C,$31,$02,$84,$85,$A9,$21
         dta $8D,$2F,$02,$60,$48,$8A,$48,$A2
         dta $7A,$A5,$87,$C9,$01,$F0,$1F,$29
         dta $01,$F0,$0A,$E6,$A2,$A5,$A2,$29
         dta $20,$F0,$02,$A2,$2C,$8E,$0A,$D4
         dta $8E,$16,$D0,$18,$66,$87,$A9,$00
         dta $85,$4D,$68,$AA,$68,$40,$A5,$88
         dta $D0,$16,$AD,$1F,$D0,$29,$02,$D0
         dta $1A,$A5,$86,$2A,$26,$86,$A9,$20
         dta $85,$A2,$A9,$FF,$85,$88,$D0,$0B
         dta $AD,$1F,$D0,$29,$02,$F0,$04,$A9
         dta $00,$85,$88,$A5,$86,$29,$0F,$09
         dta $10,$85,$87,$E6,$80,$D0,$02,$E6
         dta $81,$A5,$81,$C9,$FA,$D0,$A0,$58
         dta $4C,$72,$50,$70,$70,$70,$70,$70
         dta $47,$5B,$51,$70,$70,$70,$4E,$00
         dta $30,$70,$F0,$C6,$6B,$51,$70,$86
         dta $70,$86,$70,$06,$70,$70,$4E,$00
         dta $30,$70,$70,$70,$42,$AB,$51,$41
         dta $34,$51,$00,$00,$00,$00,$33,$25
         dta $2C,$26,$00,$34,$25,$33,$34,$00
         dta $00,$00,$00,$00,$2D,$25,$2D,$2F
         dta $32,$39,$00,$00,$00,$00,$00,$00
         dta $00,$00,$00,$00,$21,$35,$24,$29
         dta $2F,$0D,$36,$29,$33,$35,$21,$2C
         dta $00,$00,$00,$00,$2B,$25,$39,$22
         dta $2F,$21,$32,$24,$00,$00,$00,$00
         dta $00,$00,$00,$00,$21,$2C,$2C,$00
         dta $34,$25,$33,$34,$33,$00,$00,$00
         dta $00,$00,$00,$00,$00,$00,$42,$B3
         dta $A5,$AC,$A5,$A3,$B4,$56,$0C,$42
         dta $B3,$B4,$A1,$B2,$B4,$56,$2F,$32
         dta $42,$B2,$A5,$B3,$A5,$B4,$56,$00
         dta $00,$00,$70,$70,$70,$46,$00,$30
         dta $70,$70,$06,$70,$08,$70,$70,$06
         dta $70,$08,$70,$08,$70,$08,$70,$08
         dta $70,$70,$70,$01,$E7,$51,$A0,$40
         dta $42,$EF,$51,$01,$83,$00,$00,$00
         dta $00,$00,$00,$42,$B2,$A5,$B3,$A5
         dta $B4,$56,$2F,$32,$42,$A8,$A5,$AC
         dta $B0,$56,$34,$2F,$00,$25,$38,$29
         dta $34,$00,$00,$00,$00,$00,$70,$70
         dta $70,$70,$46,$00,$30,$70,$70,$70
         dta $70,$02,$70,$70,$02,$70,$02,$70
         dta $02,$70,$02,$70,$02,$70,$70,$01
         dta $E7,$51,$70,$70,$70,$70,$46,$6B
         dta $52,$70,$06,$70,$70,$4B,$00,$31
         dta $0B,$0B,$0B,$0B,$0B,$0B,$0B,$0B
         dta $0B,$0B,$0B,$0B,$0B,$0B,$0B,$0B
         dta $0B,$0B,$0B,$0B,$0B,$0B,$0B,$0B
         dta $0B,$0B,$0B,$0B,$0B,$0B,$0B,$0B
         dta $0B,$0B,$0B,$0B,$0B,$0B,$0B,$0B
         dta $0B,$0B,$70,$46,$00,$30,$70,$01
         dta $E7,$51,$00,$00,$21,$35,$24,$29
         dta $2F,$0D,$36,$29,$33,$35,$21,$2C
         dta $00,$00,$00,$00,$00,$00,$00,$00
         dta $34,$25,$33,$34,$00,$00,$00,$00
         dta $00,$00,$A2,$CB,$A0,$51,$A9,$00
         dta $20,$9B,$50,$A2,$01,$20,$79,$57
         dta $A2,$00,$20,$5F,$57,$A2,$01,$20
         dta $5F,$57,$AD,$20,$30,$C9,$AA,$F0
         dta $17,$A9,$55,$20,$FF,$53,$20,$2C
         dta $54,$20,$73,$FF,$B0,$05,$A9,$FF
         dta $4C,$BE,$52,$A9,$AA,$20,$FF,$53
         dta $AD,$24,$30,$C9,$AA,$F0,$17,$A9
         dta $55,$20,$0A,$54,$20,$2C,$54,$20
         dta $92,$FF,$B0,$05,$A9,$FF,$4C,$DC
         dta $52,$A9,$AA,$20,$0A,$54,$AD,$01
         dta $D3,$09,$10,$8D,$01,$D3,$A9,$C0
         dta $85,$8D,$A9,$00,$85,$8E,$85,$90
         dta $85,$91,$85,$8F,$A6,$8E,$BD,$38
         dta $30,$25,$8D,$C9,$80,$F0,$20,$C9
         dta $08,$F0,$1C,$A9,$44,$20,$15,$54
         dta $A9,$01,$20,$AD,$53,$F0,$0B,$20
         dta $2C,$54,$A9,$88,$20,$15,$54,$4C
         dta $20,$53,$A9,$CC,$20,$15,$54,$A5
         dta $8D,$10,$06,$A9,$0C,$85,$8D,$D0
         dta $06,$A9,$C0,$85,$8D,$E6,$8E,$A5
         dta $91,$CD,$E4,$02,$D0,$BE,$AD,$01
         dta $D3,$8D,$00,$40,$29,$EF,$8D,$01
         dta $D3,$8D,$00,$40,$09,$10,$8D,$01
         dta $D3,$AD,$00,$40,$CD,$01,$D3,$D0
         dta $49,$A9,$18,$85,$8E,$A9,$FF,$85
         dta $8D,$A9,$00,$85,$A9,$AD,$01,$D3
         dta $29,$E3,$A6,$A9,$1D,$A8,$53,$8D
         dta $01,$D3,$A9,$40,$85,$91,$85,$8F
         dta $A6,$8E,$BD,$38,$30,$C9,$AA,$F0
         dta $12,$A9,$55,$20,$15,$54,$A9,$10
         dta $20,$AD,$53,$F0,$04,$A9,$AA,$D0
         dta $02,$A9,$FF,$20,$15,$54,$E6,$8E
         dta $E6,$8E,$E6,$A9,$A5,$A9,$C9,$04
         dta $D0,$C3,$A5,$82,$D0,$03,$4C,$A3
         dta $52,$20,$30,$54,$4C,$9E,$55,$00
         dta $02,$04,$06,$FF,$85,$8F,$A2,$03
         dta $BD,$FB,$53,$C5,$91,$F0,$2C,$CA
         dta $10,$F6,$A9,$04,$85,$92,$2C,$AC
         dta $53,$A0,$00,$98,$70,$02,$49,$FF
         dta $91,$90,$C8,$D0,$F6,$A2,$0F,$20
         dta $32,$54,$98,$70,$02,$49,$FF,$D1
         dta $90,$D0,$1E,$C8,$D0,$F4,$50,$0F
         dta $B8,$50,$DE,$20,$30,$54,$A5,$91
         dta $18,$69,$04,$85,$91,$D0,$06,$E6
         dta $91,$C6,$92,$D0,$C9,$C6,$8F,$D0
         dta $B5,$60,$00,$50,$54,$30,$A2,$04
         dta $20,$30,$57,$29,$FC,$8D,$23,$30
         dta $60,$A2,$08,$20,$30,$57,$29,$FC
         dta $8D,$27,$30,$60,$48,$A6,$8E,$A5
         dta $8D,$49,$FF,$3D,$38,$30,$9D,$38
         dta $30,$68,$25,$8D,$1D,$38,$30,$9D
         dta $38,$30,$60,$A2,$3C,$D0,$02,$A2
         dta $96,$A0,$FF,$8C,$0A,$D4,$88,$D0
         dta $FA,$CA,$D0,$F5,$60,$48,$A9,$0C
         dta $8D,$17,$D0,$AD,$C8,$02,$8D,$18
         dta $D0,$A9,$00,$85,$4D,$AD,$DC,$02
         dta $F0,$09,$A9,$00,$8D,$DC,$02,$58
         dta $4C,$09,$50,$A5,$8A,$F0,$47,$AD
         dta $1F,$D0,$29,$01,$F0,$04,$A9,$B3
         dta $D0,$02,$A9,$33,$8D,$25,$30,$AD
         dta $1F,$D0,$29,$02,$F0,$04,$A9,$F3
         dta $D0,$02,$A9,$73,$8D,$28,$30,$AD
         dta $1F,$D0,$29,$04,$F0,$04,$A9,$AF
         dta $D0,$02,$A9,$2F,$8D,$2B,$30,$AD
         dta $1F,$D0,$29,$07,$C9,$07,$F0,$09
         dta $A9,$64,$8D,$02,$D2,$A9,$A8,$D0
         dta $02,$A9,$00,$8D,$03,$D2,$68,$40
         dta $A2,$00,$86,$94,$A2,$03,$20,$79
         dta $57,$A2,$0F,$A0,$52,$A9,$FF,$20
         dta $9B,$50,$A2,$02,$20,$5F,$57,$A2
         dta $07,$20,$5F,$57,$A5,$82,$F0,$13
         dta $A6,$94,$BD,$72,$55,$E6,$94,$A6
         dta $94,$E0,$13,$D0,$11,$20,$30,$54
         dta $4C,$8B,$52,$AD,$FC,$02,$C9,$FF
         dta $F0,$F9,$C9,$C0,$B0,$F5,$A2,$FF
         dta $8E,$FC,$02,$48,$29,$80,$F0,$05
         dta $A2,$08,$20,$5F,$57,$68,$48,$29
         dta $40,$F0,$0A,$A2,$05,$20,$5F,$57
         dta $A2,$04,$20,$5F,$57,$68,$29,$3F
         dta $C9,$21,$F0,$48,$C9,$2C,$F0,$4B
         dta $C9,$0C,$F0,$51,$AA,$BD,$A2,$57
         dta $48,$A9,$21,$85,$95,$A9,$30,$85
         dta $96,$68,$A0,$FF,$C8,$D1,$95,$D0
         dta $FB,$49,$80,$91,$95,$A5,$82,$F0
         dta $13,$20,$84,$55,$A2,$14,$20,$32
         dta $54,$20,$8F,$55,$A2,$0A,$20,$32
         dta $54,$4C,$BB,$54,$20,$84,$55,$AD
         dta $0F,$D2,$29,$04,$F0,$F9,$20,$8F
         dta $55,$4C,$BB,$54,$A2,$03,$20,$5F
         dta $57,$F0,$D2,$A9,$7F,$8D,$52,$30
         dta $8D,$53,$30,$D0,$C8,$A9,$32,$8D
         dta $6D,$30,$A9,$34,$8D,$6E,$30,$D0
         dta $BC,$52,$08,$0A,$2B,$28,$0D,$3D
         dta $39,$2D,$1F,$30,$35,$1D,$7F,$2D
         dta $3F,$28,$0D,$A9,$64,$8D,$00,$D2
         dta $A9,$A8,$8D,$01,$D2,$60,$A9,$00
         dta $8D,$01,$D2,$8D,$03,$D2,$8D,$05
         dta $D2,$8D,$07,$D2,$60,$A2,$02,$20
         dta $79,$57,$A9,$00,$85,$97,$A9,$00
         dta $85,$98,$A2,$2B,$A0,$52,$A9,$00
         dta $20,$9B,$50,$A2,$09,$20,$5F,$57
         dta $A5,$97,$4A,$18,$69,$11,$8D,$0B
         dta $30,$A2,$0F,$A9,$FF,$9D,$50,$31
         dta $9D,$B0,$31,$9D,$10,$32,$9D,$70
         dta $32,$9D,$D0,$32,$CA,$10,$EC,$A9
         dta $00,$85,$99,$A9,$0C,$85,$9A,$A6
         dta $99,$BD,$1D,$57,$A8,$BD,$1C,$57
         dta $AA,$A5,$9A,$20,$8F,$56,$18,$A5
         dta $9A,$69,$06,$85,$9A,$E6,$99,$E6
         dta $99,$A5,$99,$C9,$14,$D0,$E0,$20
         dta $2C,$54,$A2,$00,$86,$A6,$BD,$5B
         dta $56,$48,$BD,$68,$56,$48,$BD,$82
         dta $56,$A8,$BD,$75,$56,$AA,$68,$20
         dta $8F,$56,$68,$F0,$18,$A4,$97,$99
         dta $00,$D2,$A9,$A8,$99,$01,$D2,$A6
         dta $98,$BD,$BC,$56,$AA,$20,$32,$54
         dta $E6,$98,$20,$8F,$55,$E6,$A6,$A6
         dta $A6,$E0,$0D,$D0,$C9,$20,$30,$54
         dta $E6,$97,$E6,$97,$A5,$97,$C9,$08
         dta $D0,$07,$A5,$82,$D0,$06,$4C,$A3
         dta $55,$4C,$A7,$55,$20,$30,$54,$4C
         dta $A9,$54,$51,$5B,$00,$00,$44,$00
         dta $00,$3C,$00,$00,$2D,$00,$35,$00
         dta $00,$48,$54,$4E,$48,$4E,$06,$48
         dta $4E,$06,$48,$4E,$54,$86,$F8,$C7
         dta $48,$CA,$1A,$CA,$3C,$8C,$3C,$9E
         dta $EE,$31,$31,$30,$30,$32,$30,$32
         dta $31,$30,$31,$31,$30,$31,$86,$9B
         dta $84,$9C,$AA,$A0,$00,$A9,$10,$85
         dta $9D,$A9,$06,$85,$A3,$BD,$C2,$56
         dta $11,$9B,$91,$9B,$18,$A5,$9B,$69
         dta $10,$85,$9B,$90,$02,$E6,$9C,$C6
         dta $9D,$D0,$EA,$E6,$9D,$E8,$C6,$A3
         dta $D0,$E3,$60,$20,$20,$20,$10,$10
         dta $20,$01,$1F,$3F,$7F,$3E,$1C,$00
         dta $41,$42,$4C,$70,$40,$00,$01,$02
         dta $04,$08,$10,$00,$43,$44,$48,$48
         dta $48,$00,$44,$22,$10,$08,$07,$00
         dta $04,$08,$05,$02,$00,$00,$30,$48
         dta $88,$84,$84,$00,$88,$88,$90,$A0
         dta $C0,$00,$F0,$88,$84,$82,$82,$00
         dta $82,$82,$84,$88,$F0,$00,$00,$00
         dta $00,$00,$80,$80,$80,$80,$80,$80
         dta $80,$00,$1C,$3E,$7F,$7E,$7C,$40
         dta $00,$00,$00,$00,$00,$00,$04,$04
         dta $06,$05,$06,$C1,$30,$21,$31,$81
         dta $31,$F1,$31,$02,$30,$62,$30,$22
         dta $31,$82,$31,$C2,$30,$C2,$31,$48
         dta $BD,$E2,$57,$85,$9E,$BD,$E3,$57
         dta $85,$9F,$BD,$E4,$57,$85,$A0,$BD
         dta $E5,$57,$85,$A1,$A0,$00,$68,$91
         dta $9E,$E6,$9E,$D0,$02,$E6,$9F,$48
         dta $A5,$9E,$C5,$A0,$D0,$F0,$A5,$9F
         dta $C5,$A1,$D0,$EA,$68,$60,$BD,$57
         dta $CA,$A8,$BD,$9E,$E4,$85,$9E,$BD
         dta $A8,$E4,$AA,$B9,$61,$CA,$9D,$00
         dta $30,$C8,$E8,$C6,$9E,$D0,$F4,$60
         dta $BD,$92,$57,$8D,$C4,$02,$BD,$96
         dta $57,$8D,$C5,$02,$BD,$9A,$57,$8D
         dta $C6,$02,$BD,$9E,$57,$8D,$C8,$02
         dta $60,$2C,$0C,$2A,$18,$0F,$32,$0C
         dta $0E,$D2,$D6,$00,$B4,$D2,$A0,$30
         dta $B4,$2C,$2A,$1B,$91,$92,$2B,$0B
         dta $0A,$2F,$00,$30,$35,$B2,$29,$0D
         dta $1D,$36,$A8,$23,$93,$94,$22,$38
         dta $3A,$14,$00,$13,$16,$5B,$15,$12
         dta $11,$0C,$00,$0E,$2E,$00,$2D,$0F
         dta $48,$32,$00,$25,$39,$FF,$34,$37
         dta $31,$19,$00,$10,$17,$A4,$18,$1C
         dta $1E,$26,$28,$24,$00,$A3,$27,$33
         dta $21,$00,$30,$EF,$3E,$20,$30,$24
         dta $30,$24,$30,$28,$30,$00,$30,$20
         dta $30,$00,$00,$00,$00,$00,$00,$00
         dta $00,$00,$00,$00,$00,$00,$00
;------------------------------------------------
         ORG $D800

         ;
         ; zamiana ciągu ASCII na liczbę FP
         ;
AFP      JSR $DBA1
;------------------------------------------------
         ORG $D803

         ;
         ; kod identyfikacyjny nowego urządzenia
         ;
DEVID1   JSR $DBBB
         BCS *+59
;------------------------------------------------
         ORG $D808

         ;
         ; przerwanie IRQ nowego urządzenia
         ;
DEVINT   LDX #$ED
         LDY #$04
         JSR $DA48
;------------------------------------------------
         ORG $D80F

         ;
         ; wektor operacji CLOSE nowego urządzenia
         ;
PDVCLV   LDX #$FF
;------------------------------------------------
         ORG $D811

         ;
         ; wektor operacji GET BYTE nowego urządzenia
         ;
PDVGBV   STX $F1
;------------------------------------------------
         ORG $D813

         ;
         ; wektor operacji PUT BYTE nowego urządzenia
         ;
PDVPBV   JSR $DA44
         BEQ *+6
         LDA #$FF
         STA $F0
         JSR $DB94
         BCS *+35
         PHA
         LDX $D5
         BNE *+19
         JSR $DBEB
         PLA
         ORA $D9
         STA $D9
         LDX $F1
         BMI *-24
         INX
         STX $F1
         BNE *-29
         PLA
         LDX $F1
         BPL *+4
         INC $ED
         JMP $D818
         RTS
         CMP #$2E
         BEQ *+22
         CMP #$45
         BEQ *+27
         LDX $F0
         BNE *+106
         CMP #$2B
         BEQ *-56
         CMP #$2D
         BEQ *+2
         STA $EE
         BEQ *-64
         LDX $F1
         BPL *+90
         INX
         STX $F1
         BEQ *-73
         LDA $F2
         STA $EC
         JSR $DB94
         BCS *+57
         TAX
         LDA $ED
         PHA
         STX $ED
         JSR $DB94
         BCS *+25
         PHA
         LDA $ED
         ASL
         STA $ED
         ASL
         ASL
         ADC $ED
         STA $ED
         PLA
         CLC
         ADC $ED
         STA $ED
         LDY $F2
         JSR $DB9D
         LDA $EF
         BEQ *+11
         LDA $ED
         EOR #$FF
         CLC
         ADC #$01
         STA $ED
         PLA
         CLC
         ADC $ED
         STA $ED
         BNE *+21
         CMP #$2B
         BEQ *+8
         CMP #$2D
         BNE *+9
         STA $EF
         JSR $DB94
         BCC *-68
         LDA $EC
         STA $F2
         DEC $F2
         LDA $ED
         LDX $F1
         BMI *+7
         BEQ *+5
         SEC
         SBC $F1
         PHA
         ROL
         PLA
         ROR
         STA $ED
         BCC *+5
         JSR $DBEB
         LDA $ED
         CLC
         ADC #$44
         STA $D4
         JSR $DC00
         BCS *+13
         LDX $EE
         BEQ *+8
         LDA $D4
         ORA #$80
         STA $D4
         CLC
         RTS
;------------------------------------------------
         ORG $D8E6

         ;
         ; zamiana liczby FP na ciąg ASCII
         ;
FASC     JSR $DA51
         LDA #$30
         STA $057F
         LDA $D4
         BEQ *+42
         AND #$7F
         CMP #$3F
         BCC *+42
         CMP #$45
         BCS *+38
         SEC
         SBC #$3F
         JSR $DC70
         JSR $DCA4
         ORA #$80
         STA $0580,X
         LDA $0580
         CMP #$2E
         BEQ *+5
         JMP $D988
         JSR $DCC1
         JMP $D99C
         LDA #$B0
         STA $0580
         RTS
         LDA #$01
         JSR $DC70
         JSR $DCA4
         INX
         STX $F2
         LDA $D4
         ASL
         SEC
         SBC #$80
         LDX $0580
         CPX #$30
         BEQ *+25
         LDX $0581
         LDY $0582
         STX $0582
         STY $0581
         LDX $F2
         CPX #$02
         BNE *+4
         INC $F2
         CLC
         ADC #$01
         STA $ED
         LDA #$45
         LDY $F2
         JSR $DC9F
         STY $F2
         LDA $ED
         BPL *+13
         LDA #$00
         SEC
         SBC $ED
         STA $ED
         LDA #$2D
         BNE *+4
         LDA #$2B
         JSR $DC9F
         LDX #$00
         LDA $ED
         SEC
         SBC #$0A
         BCC *+5
         INX
         BNE *-6
         CLC
         ADC #$0A
         PHA
         TXA
         JSR $DC9D
         PLA
         ORA #$80
         JSR $DC9D
         LDA $0580
         CMP #$30
         BNE *+15
         CLC
         LDA $F3
         ADC #$01
         STA $F3
         LDA $F4
         ADC #$00
         STA $F4
         LDA $D4
         BPL *+11
         JSR $DCC1
         LDY #$00
         LDA #$2D
         STA ($F3),Y
         RTS
;------------------------------------------------
         ORG $D9AA

         ;
         ; zamiana liczby całkowitej na FP
         ;
IFP      LDA $D4
         STA $F8
         LDA $D5
         STA $F7
         JSR $DA44
         SED
         LDY #$10
         ASL $F8
         ROL $F7
         LDX #$03
         LDA $D4,X
         ADC $D4,X
         STA $D4,X
         DEX
         BNE *-7
         DEY
         BNE *-16
         CLD
         LDA #$42
         STA $D4
         JMP $DC00
;------------------------------------------------
         ORG $D9D2

         ;
         ; zamiana liczby FP na całkowitą
         ;
FPI      LDA #$00
         STA $F7
         STA $F8
         LDA $D4
         BMI *+104
         CMP #$43
         BCS *+100
         SEC
         SBC #$40
         BCC *+65
         ADC #$00
         ASL
         STA $F5
         JSR $DA5A
         BCS *+85
         LDA $F7
         STA $F9
         LDA $F8
         STA $FA
         JSR $DA5A
         BCS *+72
         JSR $DA5A
         BCS *+67
         CLC
         LDA $F8
         ADC $FA
         STA $F8
         LDA $F7
         ADC $F9
         STA $F7
         BCS *+52
         JSR $DCB9
         CLC
         ADC $F8
         STA $F8
         LDA $F7
         ADC #$00
         BCS *+38
         STA $F7
         DEC $F5
         BNE *-56
         JSR $DCB9
         CMP #$05
         BCC *+15
         CLC
         LDA $F8
         ADC #$01
         STA $F8
         LDA $F7
         ADC #$00
         STA $F7
         LDA $F8
         STA $D4
         LDA $F7
         STA $D5
         CLC
         RTS
         SEC
         RTS
;------------------------------------------------
         ORG $DA44

         ;
         ; zerowanie FR0
         ;
ZFR0     LDX #$D4
         LDY #$06
;------------------------------------------------
         ORG $DA48

         ;
         ; zerowanie wg rejestru X
         ;
AF1      LDA #$00
         STA $00,X
         INX
         DEY
         BNE *-4
         RTS
;------------------------------------------------
         ORG $DA51

         ;
         ; zapis wektora bufora
         ;
STBV     LDA #$05
         STA $F4
         LDA #$80
         STA $F3
         RTS
;------------------------------------------------
         ORG $DA5A

         ;
         ; przesunięcie w lewo ZTEMP2
         ;
ROLZ2    CLC
         ROL $F8
         ROL $F7
         RTS
;------------------------------------------------
         ORG $DA60

         ;
         ; odejmowanie liczb FP
         ;
FSUB     LDA $E0
         EOR #$80
         STA $E0
;------------------------------------------------
         ORG $DA66

         ;
         ; dodawanie liczb FP
         ;
FADD     LDA $E0
         AND #$7F
         STA $F7
         LDA $D4
         AND #$7F
         SEC
         SBC $F7
         BPL *+18
         LDX #$05
         LDA $D4,X
         LDY $E0,X
         STA $E0,X
         TYA
         STA $D4,X
         DEX
         BPL *-10
         BMI *-29
         BEQ *+9
         CMP #$05
         BCS *+27
         JSR $DC3E
         SED
         LDA $D4
         EOR $E0
         BMI *+32
         LDX #$04
         CLC
         LDA $D5,X
         ADC $E1,X
         STA $D5,X
         DEX
         BPL *-7
         CLD
         BCS *+5
         JMP $DC00
         LDA #$01
         JSR $DC3A
         LDA #$01
         STA $D5
         JMP $DC00
         LDX #$04
         SEC
         LDA $D5,X
         SBC $E1,X
         STA $D5,X
         DEX
         BPL *-7
         BCC *+6
         CLD
         JMP $DC00
         LDA $D4
         EOR #$80
         STA $D4
         SEC
         LDX #$04
         LDA #$00
         SBC $D5,X
         STA $D5,X
         DEX
         BPL *-7
         CLD
         JMP $DC00
;------------------------------------------------
         ORG $DADB

         ;
         ; mnożenie liczb FP
         ;
FMUL     LDA $D4
         BEQ *+71
         LDA $E0
         BEQ *+64
         JSR $DCCF
         SEC
         SBC #$40
         SEC
         ADC $E0
         BMI *+58
         JSR $DCE0
         LDA $DF
         AND #$0F
         STA $F6
         DEC $F6
         BMI *+8
         JSR $DD01
         JMP $DAF7
         LDA $DF
         LSR
         LSR
         LSR
         LSR
         STA $F6
         DEC $F6
         BMI *+8
         JSR $DD05
         JMP $DB09
         JSR $DC62
         DEC $F5
         BNE *-39
         LDA $ED
         STA $D4
         JMP $DC04
         JSR $DA44
         CLC
         RTS
         SEC
         RTS
;------------------------------------------------
         ORG $DB28

         ;
         ; dzielenie liczb FP
         ;
FDIV     LDA $E0
         BEQ *-4
         LDA $D4
         BEQ *-10
         JSR $DCCF
         SEC
         SBC $E0
         CLC
         ADC #$40
         BMI *-19
         JSR $DCE0
         INC $F5
         JMP $DB4E
         LDX #$00
         LDA $D5,X
         STA $D4,X
         INX
         CPX #$0C
         BNE *-7
         LDY #$05
         SEC
         SED
         LDA.W $00DA,Y
         SBC.W $00E6,Y
         STA.W $00DA,Y
         DEY
         BPL *-10
         CLD
         BCC *+6
         INC $D9
         BNE *-21
         JSR $DD0F
         ASL $D9
         ASL $D9
         ASL $D9
         ASL $D9
         LDY #$05
         SEC
         SED
         LDA.W $00DA,Y
         SBC.W $00E0,Y
         STA.W $00DA,Y
         DEY
         BPL *-10
         CLD
         BCC *+6
         INC $D9
         BNE *-21
         JSR $DD09
         DEC $F5
         BNE *-73
         JSR $DC62
         JMP $DB1A
;------------------------------------------------
         ORG $DB94

         ;
         ; zamiana znaku z bufora
         ;
INBCN    JSR $DBAF
         LDY $F2
         BCC *+4
         LDA ($F3),Y
         INY
         STY $F2
         RTS
;------------------------------------------------
         ORG $DBA1

         ;
         ; przeszukiwanie bufora
         ;
INBSS    LDY $F2
         LDA #$20
         CMP ($F3),Y
         BNE *+5
         INY
         BNE *-5
         STY $F2
         RTS
;------------------------------------------------
         ORG $DBAF

         ;
         ; zamiana znaku ASCII na kod BCD
         ;
ADBT     LDY $F2
         LDA ($F3),Y
         SEC
         SBC #$30
         BCC *+26
         CMP #$0A
         RTS
;------------------------------------------------
         ORG $DBBB

         ;
         ; przeszukiwanie ciągu ASCII
         ;
ASCSS    LDA $F2
         PHA
         JSR $DB94
         BCC *+33
         CMP #$2E
         BEQ *+22
         CMP #$2B
         BEQ *+9
         CMP #$2D
         BEQ *+5
         PLA
         SEC
         RTS
         JSR $DB94
         BCC *+13
         CMP #$2E
         BNE *-10
         JSR $DB94
         BCC *+4
         BCS *-17
         PLA
         STA $F2
         CLC
         RTS
;------------------------------------------------
         ORG $DBE7

         ;
         ; przesunięcie w lewo liczby w FR2
         ;
ROLFR2   LDX #$E7
         BNE *+4
;------------------------------------------------
         ORG $DBEB

         ;
         ; przesunięcie w lewo liczby w FR0
         ;
ROLFR0   LDX #$D5
         LDY #$04
         CLC
         ROL $04,X
         ROL $03,X
         ROL $02,X
         ROL $01,X
         ROL $00,X
         ROL $EC
         DEY
         BNE *-14
         RTS
;------------------------------------------------
         ORG $DC00

         ;
         ; poprawienie formatu liczby FP
         ;
NFR0     LDX #$00
         STX $DA
         LDX #$04
         LDA $D4
         BEQ *+48
         LDA $D5
         BNE *+28
         LDY #$00
         LDA.W $00D6,Y
         STA.W $00D5,Y
         INY
         CPY #$05
         BCC *-9
         DEC $D4
         DEX
         BNE *-20
         LDA $D5
         BNE *+6
         STA $D4
         CLC
         RTS
         LDA $D4
         AND #$7F
         CMP #$71
         BCC *+3
         RTS
         CMP #$0F
         BCS *+5
         JSR $DA44
         CLC
         RTS
;------------------------------------------------
         ORG $DC3A

         ;
         ; adjustowanie liczby z FR0
         ;
ADJ0     LDX #$D4
         BNE *+4
;------------------------------------------------
         ORG $DC3E

         ;
         ; adjustowanie liczby z FR1
         ;
ADJ1     LDX #$E0
         STX $F9
         STA $F7
         STA $F8
         LDY #$04
         LDA $04,X
         STA $05,X
         DEX
         DEY
         BNE *-6
         LDA #$00
         STA $05,X
         LDX $F9
         DEC $F7
         BNE *-18
         LDA $00,X
         CLC
         ADC $F8
         STA $00,X
         RTS
;------------------------------------------------
         ORG $DC62

         ;
         ; przesunięcie w prawo FR0
         ;
SHR0     LDX #$0A
         LDA $D4,X
         STA $D5,X
         DEX
         BPL *-5
         LDA #$00
         STA $D4
         RTS
;------------------------------------------------
         ORG $DC70

         ;
         ; zapis znaku ASCII do bufora
         ;
STALB    STA $F7
         LDX #$00
         LDY #$00
         JSR $DC93
         SEC
         SBC #$01
         STA $F7
         LDA $D5,X
         LSR
         LSR
         LSR
         LSR
         JSR $DC9D
         LDA $D5,X
         AND #$0F
         JSR $DC9D
         INX
         CPX #$05
         BCC *-27
         LDA $F7
         BNE *+7
         LDA #$2E
         JSR $DC9F
         RTS
;------------------------------------------------
         ORG $DC9D

         ;
         ; zamiana kodu BCD na znak ASCII
         ;
BTAD     ORA #$30
;------------------------------------------------
         ORG $DC9F

         ;
         ; zapis do bufora
         ;
STLB     STA $0580,Y
         INY
         RTS
;------------------------------------------------
         ORG $DCA4

         ;
         ; przeszukiwanie bufora
         ;
LBSR     LDX #$0A
         LDA $0580,X
         CMP #$2E
         BEQ *+9
         CMP #$30
         BNE *+9
         DEX
         BNE *-12
         DEX
         LDA $0580,X
         RTS
;------------------------------------------------
         ORG $DCB9

         ;
         ; wydzielenie cyfry
         ;
IDEX     JSR $DBEB
         LDA $EC
         AND #$0F
         RTS
;------------------------------------------------
         ORG $DCC1

         ;
         ; zmniejszenie licznika bufora
         ;
DECIBP   SEC
         LDA $F3
         SBC #$01
         STA $F3
         LDA $F4
         SBC #$00
         STA $F4
         RTS
;------------------------------------------------
         ORG $DCCF

         ;
         ; obliczenie znaku przy mnożeniu i dzieleniu
         ;
SGNEV    LDA $D4
         EOR $E0
         AND #$80
         STA $EE
         ASL $E0
         LSR $E0
         LDA $D4
         AND #$7F
         RTS
;------------------------------------------------
         ORG $DCE0

         ;
         ; przeniesienie argumentów
         ;
MVARG    ORA $EE
         STA $ED
         LDA #$00
         STA $D4
         STA $E0
         JSR $DD28
         JSR $DBE7
         LDA $EC
         AND #$0F
         STA $E6
         LDA #$05
         STA $F5
         JSR $DD34
         JSR $DA44
         RTS
;------------------------------------------------
         ORG $DD01

         ;
         ; dodanie rejestrów FR0 i FR1
         ;
ADD01    LDX #$D9
         BNE *+8
;------------------------------------------------
         ORG $DD05

         ;
         ; dodanie rejestrów FR0 i FR2
         ;
ADD02    LDX #$D9
         BNE *+10
;------------------------------------------------
         ORG $DD09

         ;
         ; dodanie rejestrów FRE i FR1
         ;
ADDE1    LDX #$DF
         LDY #$E5
         BNE *+6
;------------------------------------------------
         ORG $DD0F

         ;
         ; dodanie rejestrów FRE i FR2
         ;
ADDE2    LDX #$DF
         LDY #$EB
         LDA #$05
         STA $F7
         CLC
         SED
         LDA $00,X
         ADC.W $0000,Y
         STA $00,X
         DEX
         DEY
         DEC $F7
         BPL *-11
         CLD
         RTS
;------------------------------------------------
         ORG $DD28

         ;
         ; przepisanie z FR1 do FR2
         ;
FMOV12   LDY #$05
         LDA.W $00E0,Y
         STA.W $00E6,Y
         DEY
         BPL *-7
         RTS
;------------------------------------------------
         ORG $DD34

         ;
         ; przepisanie z FR0 do FRE
         ;
FMOV0E   LDY #$05
         LDA.W $00D4,Y
         STA.W $00DA,Y
         DEY
         BPL *-7
         RTS
;------------------------------------------------
         ORG $DD40

         ;
         ; przeliczenie wielomianowe
         ;
PLYEVL   STX $FE
         STY $FF
         STA $EF
         LDX #$E0
         LDY #$05
         JSR $DDA7
         JSR $DDB6
         LDX $FE
         LDY $FF
         JSR $DD89
         DEC $EF
         BEQ *+47
         JSR $DADB
         BCS *+42
         CLC
         LDA $FE
         ADC #$06
         STA $FE
         BCC *+8
         LDA $FF
         ADC #$00
         STA $FF
         LDX $FE
         LDY $FF
         JSR $DD98
         JSR $DA66
         BCS *+15
         DEC $EF
         BEQ *+11
         LDX #$E0
         LDY #$05
         JSR $DD98
         BMI *-43
         RTS
;------------------------------------------------
         ORG $DD89

         ;
         ; zapis liczby FP do FR0 według X,Y
         ;
FLD0R    STX $FC
         STY $FD
;------------------------------------------------
         ORG $DD8D

         ;
         ; zapis liczby FP do FR0 według FLPTR
         ;
FLD0P    LDY #$05
         LDA ($FC),Y
         STA.W $00D4,Y
         DEY
         BPL *-6
         RTS
;------------------------------------------------
         ORG $DD98

         ;
         ; zapis liczby FP do FR1 według X,Y
         ;
FLD1R    STX $FC
         STY $FD
;------------------------------------------------
         ORG $DD9C

         ;
         ; zapis liczby FP do FR1 według FLPTR
         ;
FLD1P    LDY #$05
         LDA ($FC),Y
         STA.W $00E0,Y
         DEY
         BPL *-6
         RTS
;------------------------------------------------
         ORG $DDA7

         ;
         ; zapis liczby FP z FR0 według X,Y
         ;
FST0R    STX $FC
         STY $FD
;------------------------------------------------
         ORG $DDAB

         ;
         ; zapis liczby FP z FR0 według FLPTR
         ;
FST0P    LDY #$05
         LDA.W $00D4,Y
         STA ($FC),Y
         DEY
         BPL *-6
         RTS
;------------------------------------------------
         ORG $DDB6

         ;
         ; przepisanie z FR0 do FR1
         ;
FMOV01   LDX #$05
         LDA $D4,X
         STA $E0,X
         DEX
         BPL *-5
         RTS
;------------------------------------------------
         ORG $DDC0

         ;
         ; potęgowanie o podstawie e
         ;
EXP      LDX #$89
         LDY #$DE
         JSR $DD98
         JSR $DADB
         BCS *+129
;------------------------------------------------
         ORG $DDCC

         ;
         ; potęgowanie o podstawie 10
         ;
EXP10    LDA #$00
         STA $F1
         LDA $D4
         STA $F0
         AND #$7F
         STA $D4
         SEC
         SBC #$40
         BMI *+40
         CMP #$04
         BPL *+108
         LDX #$E6
         LDY #$05
         JSR $DDA7
         JSR $D9D2
         LDA $D4
         STA $F1
         LDA $D5
         BNE *+90
         JSR $D9AA
         JSR $DDB6
         LDX #$E6
         LDY #$05
         JSR $DD89
         JSR $DA60
         LDA #$0A
         LDX #$4D
         LDY #$DE
         JSR $DD40
         JSR $DDB6
         JSR $DADB
         LDA $F1
         BEQ *+37
         CLC
         ROR
         STA $E0
         LDA #$01
         BCC *+4
         LDA #$10
         STA $E1
         LDX #$04
         LDA #$00
         STA $E2,X
         DEX
         BPL *-3
         LDA $E0
         CLC
         ADC #$40
         BCS *+27
         BMI *+25
         STA $E0
         JSR $DADB
         LDA $F0
         BPL *+15
         JSR $DDB6
         LDX #$8F
         LDY #$DE
         JSR $DD89
         JSR $DB28
         RTS
         SEC
         RTS
;------------------------------------------------
         ORG $DE4D

         ;
         ; tabela współczynników potęgowania
         ;
TP10     dta $3D,$17,$94,$19,$00,$00,$3D,$57
         dta $33,$05,$00,$00,$3E,$05,$54,$76
         dta $62,$00,$3E,$32,$19,$62,$27,$00
         dta $3F,$01,$68,$60,$30,$36,$3F,$07
         dta $32,$03,$27,$41,$3F,$25,$43,$34
         dta $56,$75,$3F,$66,$27,$37,$30,$50
         dta $40,$01,$15,$12,$92,$55,$3F,$99
         dta $99,$99,$99,$99,$3F,$43,$42,$94
         dta $48,$19,$40,$01,$00,$00,$00,$00
;------------------------------------------------
         ORG $DE95

         ;
         ; iloraz różnicowy
         ;
RSQT     STX $FE
         STY $FF
         LDX #$E0
         LDY #$05
         JSR $DDA7
         LDX $FE
         LDY $FF
         JSR $DD98
         JSR $DA66
         LDX #$E6
         LDY #$05
         JSR $DDA7
         LDX #$E0
         LDY #$05
         JSR $DD89
         LDX $FE
         LDY $FF
         JSR $DD98
         JSR $DA60
         LDX #$E6
         LDY #$05
         JSR $DD98
         JSR $DB28
         RTS
;------------------------------------------------
         ORG $DECD

         ;
         ; logarytm naturalny
         ;
LOG      LDA #$01
         BNE *+4
;------------------------------------------------
         ORG $DED1

         ;
         ; logarytm dziesiętny
         ;
LOG10    LDA #$00
         STA $F0
         LDA $D4
         BEQ *+7
         BMI *+5
         JMP $DFF6
         SEC
         RTS
         SBC #$40
         ASL
         STA $F1
         LDA $D5
         AND #$F0
         BNE *+6
         LDA #$01
         BNE *+6
         INC $F1
         LDA #$10
         STA $E1
         LDX #$04
         LDA #$00
         STA $E2,X
         DEX
         BPL *-3
         JSR $DB28
         LDX #$66
         LDY #$DF
         JSR $DE95
         LDX #$E6
         LDY #$05
         JSR $DDA7
         JSR $DDB6
         JSR $DADB
         LDA #$0A
         LDX #$72
         LDY #$DF
         JSR $DD40
         LDX #$E6
         LDY #$05
         JSR $DD98
         JSR $DADB
         LDX #$6C
         LDY #$DF
         JSR $DD98
         JSR $DA66
         JSR $DDB6
         LDA #$00
         STA $D5
         LDA $F1
         STA $D4
         BPL *+9
         EOR #$FF
         CLC
         ADC #$01
         STA $D4
         JSR $D9AA
         BIT $F1
         BPL *+8
         LDA #$80
         ORA $D4
         STA $D4
         JSR $DA66
         LDA $F0
         BEQ *+12
         LDX #$89
         LDY #$DE
         JSR $DD98
         JSR $DB28
         CLC
         RTS
;------------------------------------------------
         ORG $DF66

         ;
         ; tabela współczynników logarytmowania
         ;
TLOG     dta $40,$03,$16,$22,$77,$66,$3F,$50
         dta $00,$00,$00,$00,$3F,$49,$15,$57
         dta $11,$08,$BF,$51,$70,$49,$47,$08
         dta $3F,$39,$20,$57,$61,$95,$BF,$04
         dta $39,$63,$03,$55,$3F,$10,$09,$30
         dta $12,$64,$3F,$09,$39,$08,$04,$60
         dta $3F,$12,$42,$58,$47,$42,$3F,$17
         dta $37,$12,$06,$08,$3F,$28,$95,$29
         dta $71,$17,$3F,$86,$85,$88,$96,$44
;------------------------------------------------
         ORG $DFAE

         ;
         ; tabela współczynników funkcji arctg
         ;
TATAN    dta $3E,$16,$05,$44,$49,$00,$BE,$95
         dta $68,$38,$45,$00,$3F,$02,$68,$79
         dta $94,$16,$BF,$04,$92,$78,$90,$80
         dta $3F,$07,$03,$15,$20,$00,$BF,$08
         dta $92,$29,$12,$44,$3F,$11,$08,$40
         dta $09,$11,$BF,$14,$28,$31,$56,$04
         dta $3F,$19,$99,$98,$77,$44,$BF,$33
         dta $33,$33,$31,$13,$3F,$99,$99,$99
         dta $99,$99,$3F,$78,$53,$98,$16,$34
         LDA $D4
         STA $E0
         SEC
         JMP $DEE0
         dta $00,$00
;------------------------------------------------
         ORG $E000

         ;
         ; standardowy zestaw znaków
         ;
CHARSET1 BRK
         dta $00,$00,$00,$00,$00,$00,$00,$00
         dta $18,$18,$18,$18,$00,$18,$00,$00
         dta $66,$66,$66,$00,$00,$00,$00,$00
         dta $66,$FF,$66,$66,$FF,$66,$00,$18
         dta $3E,$60,$3C,$06,$7C,$18,$00,$00
         dta $66,$6C,$18,$30,$66,$46,$00,$1C
         dta $36,$1C,$38,$6F,$66,$3B,$00,$00
         dta $18,$18,$18,$00,$00,$00,$00,$00
         dta $0E,$1C,$18,$18,$1C,$0E,$00,$00
         dta $70,$38,$18,$18,$38,$70,$00,$00
         dta $66,$3C,$FF,$3C,$66,$00,$00,$00
         dta $18,$18,$7E,$18,$18,$00,$00,$00
         dta $00,$00,$00,$00,$18,$18,$30,$00
         dta $00,$00,$7E,$00,$00,$00,$00,$00
         dta $00,$00,$00,$00,$18,$18,$00,$00
         dta $06,$0C,$18,$30,$60,$40,$00,$00
         dta $3C,$66,$6E,$76,$66,$3C,$00,$00
         dta $18,$38,$18,$18,$18,$7E,$00,$00
         dta $3C,$66,$0C,$18,$30,$7E,$00,$00
         dta $7E,$0C,$18,$0C,$66,$3C,$00,$00
         dta $0C,$1C,$3C,$6C,$7E,$0C,$00,$00
         dta $7E,$60,$7C,$06,$66,$3C,$00,$00
         dta $3C,$60,$7C,$66,$66,$3C,$00,$00
         dta $7E,$06,$0C,$18,$30,$30,$00,$00
         dta $3C,$66,$3C,$66,$66,$3C,$00,$00
         dta $3C,$66,$3E,$06,$0C,$38,$00,$00
         dta $00,$18,$18,$00,$18,$18,$00,$00
         dta $00,$18,$18,$00,$18,$18,$30,$06
         dta $0C,$18,$30,$18,$0C,$06,$00,$00
         dta $00,$7E,$00,$00,$7E,$00,$00,$60
         dta $30,$18,$0C,$18,$30,$60,$00,$00
         dta $3C,$66,$0C,$18,$00,$18,$00,$00
         dta $3C,$66,$6E,$6E,$60,$3E,$00,$00
         dta $18,$3C,$66,$66,$7E,$66,$00,$00
         dta $7C,$66,$7C,$66,$66,$7C,$00,$00
         dta $3C,$66,$60,$60,$66,$3C,$00,$00
         dta $78,$6C,$66,$66,$6C,$78,$00,$00
         dta $7E,$60,$7C,$60,$60,$7E,$00,$00
         dta $7E,$60,$7C,$60,$60,$60,$00,$00
         dta $3E,$60,$60,$6E,$66,$3E,$00,$00
         dta $66,$66,$7E,$66,$66,$66,$00,$00
         dta $7E,$18,$18,$18,$18,$7E,$00,$00
         dta $06,$06,$06,$06,$66,$3C,$00,$00
         dta $66,$6C,$78,$78,$6C,$66,$00,$00
         dta $60,$60,$60,$60,$60,$7E,$00,$00
         dta $63,$77,$7F,$6B,$63,$63,$00,$00
         dta $66,$76,$7E,$7E,$6E,$66,$00,$00
         dta $3C,$66,$66,$66,$66,$3C,$00,$00
         dta $7C,$66,$66,$7C,$60,$60,$00,$00
         dta $3C,$66,$66,$66,$6C,$36,$00,$00
         dta $7C,$66,$66,$7C,$6C,$66,$00,$00
         dta $3C,$60,$3C,$06,$06,$3C,$00,$00
         dta $7E,$18,$18,$18,$18,$18,$00,$00
         dta $66,$66,$66,$66,$66,$7E,$00,$00
         dta $66,$66,$66,$66,$3C,$18,$00,$00
         dta $63,$63,$6B,$7F,$77,$63,$00,$00
         dta $66,$66,$3C,$3C,$66,$66,$00,$00
         dta $66,$66,$3C,$18,$18,$18,$00,$00
         dta $7E,$0C,$18,$30,$60,$7E,$00,$00
         dta $1E,$18,$18,$18,$18,$1E,$00,$00
         dta $40,$60,$30,$18,$0C,$06,$00,$00
         dta $78,$18,$18,$18,$18,$78,$00,$00
         dta $08,$1C,$36,$63,$00,$00,$00,$00
         dta $00,$00,$00,$00,$00,$FF,$00,$00
         dta $36,$7F,$7F,$3E,$1C,$08,$00,$18
         dta $18,$18,$1F,$1F,$18,$18,$18,$03
         dta $03,$03,$03,$03,$03,$03,$03,$18
         dta $18,$18,$F8,$F8,$00,$00,$00,$18
         dta $18,$18,$F8,$F8,$18,$18,$18,$00
         dta $00,$00,$F8,$F8,$18,$18,$18,$03
         dta $07,$0E,$1C,$38,$70,$E0,$C0,$C0
         dta $E0,$70,$38,$1C,$0E,$07,$03,$01
         dta $03,$07,$0F,$1F,$3F,$7F,$FF,$00
         dta $00,$00,$00,$0F,$0F,$0F,$0F,$80
         dta $C0,$E0,$F0,$F8,$FC,$FE,$FF,$0F
         dta $0F,$0F,$0F,$00,$00,$00,$00,$F0
         dta $F0,$F0,$F0,$00,$00,$00,$00,$FF
         dta $FF,$00,$00,$00,$00,$00,$00,$00
         dta $00,$00,$00,$00,$00,$FF,$FF,$00
         dta $00,$00,$00,$F0,$F0,$F0,$F0,$00
         dta $1C,$1C,$77,$77,$08,$1C,$00,$00
         dta $00,$00,$1F,$1F,$18,$18,$18,$00
         dta $00,$00,$FF,$FF,$00,$00,$00,$18
         dta $18,$18,$FF,$FF,$18,$18,$18,$00
         dta $00,$3C,$7E,$7E,$7E,$3C,$00,$00
         dta $00,$00,$00,$FF,$FF,$FF,$FF,$C0
         dta $C0,$C0,$C0,$C0,$C0,$C0,$C0,$00
         dta $00,$00,$FF,$FF,$18,$18,$18,$18
         dta $18,$18,$FF,$FF,$00,$00,$00,$F0
         dta $F0,$F0,$F0,$F0,$F0,$F0,$F0,$18
         dta $18,$18,$1F,$1F,$00,$00,$00,$78
         dta $60,$78,$60,$7E,$18,$1E,$00,$00
         dta $18,$3C,$7E,$18,$18,$18,$00,$00
         dta $18,$18,$18,$7E,$3C,$18,$00,$00
         dta $18,$30,$7E,$30,$18,$00,$00,$00
         dta $18,$0C,$7E,$0C,$18,$00,$00,$00
         dta $18,$3C,$7E,$7E,$3C,$18,$00,$00
         dta $00,$3C,$06,$3E,$66,$3E,$00,$00
         dta $60,$60,$7C,$66,$66,$7C,$00,$00
         dta $00,$3C,$60,$60,$60,$3C,$00,$00
         dta $06,$06,$3E,$66,$66,$3E,$00,$00
         dta $00,$3C,$66,$7E,$60,$3C,$00,$00
         dta $0E,$18,$3E,$18,$18,$18,$00,$00
         dta $00,$3E,$66,$66,$3E,$06,$7C,$00
         dta $60,$60,$7C,$66,$66,$66,$00,$00
         dta $18,$00,$38,$18,$18,$3C,$00,$00
         dta $06,$00,$06,$06,$06,$06,$3C,$00
         dta $60,$60,$6C,$78,$6C,$66,$00,$00
         dta $38,$18,$18,$18,$18,$3C,$00,$00
         dta $00,$66,$7F,$7F,$6B,$63,$00,$00
         dta $00,$7C,$66,$66,$66,$66,$00,$00
         dta $00,$3C,$66,$66,$66,$3C,$00,$00
         dta $00,$7C,$66,$66,$7C,$60,$60,$00
         dta $00,$3E,$66,$66,$3E,$06,$06,$00
         dta $00,$7C,$66,$60,$60,$60,$00,$00
         dta $00,$3E,$60,$3C,$06,$7C,$00,$00
         dta $18,$7E,$18,$18,$18,$0E,$00,$00
         dta $00,$66,$66,$66,$66,$3E,$00,$00
         dta $00,$66,$66,$66,$3C,$18,$00,$00
         dta $00,$63,$6B,$7F,$3E,$36,$00,$00
         dta $00,$66,$3C,$18,$3C,$66,$00,$00
         dta $00,$66,$66,$66,$3E,$0C,$78,$00
         dta $00,$7E,$0C,$18,$30,$7E,$00,$00
         dta $18,$3C,$7E,$7E,$18,$3C,$00,$18
         dta $18,$18,$18,$18,$18,$18,$18,$00
         dta $7E,$78,$7C,$6E,$66,$06,$00,$08
         dta $18,$38,$78,$38,$18,$08,$00,$10
         dta $18,$1C,$1E,$1C,$18,$10,$00
;------------------------------------------------
         ORG $E400

         ;
         ; wektory obsługi edytora
         ;
EDTVEC   dta $93,$EF,$2D,$F2,$49,$F2,$AF,$F2
         dta $1D,$F2,$2C,$F2,$4C,$6E,$EF,$00
;------------------------------------------------
         ORG $E410

         ;
         ; wektory obsługi ekranu
         ;
SCRVEC   dta $8D,$EF,$2D,$F2,$7F,$F1,$A3,$F1
         dta $1D,$F2,$AE,$F9,$4C,$6E,$EF,$00
;------------------------------------------------
         ORG $E420

         ;
         ; wektory obsługi klawiatury
         ;
KBDVEC   dta $1D,$F2,$1D,$F2,$FC,$F2,$2C,$F2
         dta $1D,$F2,$2C,$F2,$4C,$6E,$EF,$00
;------------------------------------------------
         ORG $E430

         ;
         ; wektory obsługi drukarki
         ;
PRTVEC   dta $C1,$FE,$06,$FF,$C0,$FE,$CA,$FE
         dta $A2,$FE,$C0,$FE,$4C,$99,$FE,$00
;------------------------------------------------
         ORG $E440

         ;
         ; wektory obsługi magnetofonu
         ;
CASVEC   dta $E5,$FC,$CE,$FD,$79,$FD,$B3,$FD
         dta $CB,$FD,$E4,$FC,$4C,$DB,$FC,$00
;------------------------------------------------
         ORG $E450

         ;
         ; skok do DSKINIT
         ;
JDSKINIT JMP $C6A3
;------------------------------------------------
         ORG $E453

         ;
         ; skok do DSKINT
         ;
JDSKINT  JMP $C6B3
;------------------------------------------------
         ORG $E456

         ;
         ; skok do CIOMAIN
         ;
JCIOMAIN JMP $E4DF
;------------------------------------------------
         ORG $E459

         ;
         ; skok do SIOINT
         ;
JSIOINT  JMP $C933
;------------------------------------------------
         ORG $E45C

         ;
         ; skok do SETVBLV
         ;
JSETVBV  JMP $C272
;------------------------------------------------
         ORG $E45F

         ;
         ; skok do SYSVBL
         ;
JSYSVBL  JMP $C0E2
;------------------------------------------------
         ORG $E462

         ;
         ; skok do EXITVBL
         ;
JEXITVB  JMP $C28A
;------------------------------------------------
         ORG $E465

         ;
         ; skok do SIOINIT
         ;
JSIOINIT JMP $E95C
;------------------------------------------------
         ORG $E468

         ;
         ; skok do SNDENBL
         ;
JSNDENB  JMP $EC17
;------------------------------------------------
         ORG $E46B

         ;
         ; skok do NMIENBL
         ;
JNMIEN   JMP $C00C
;------------------------------------------------
         ORG $E46E

         ;
         ; skok do CIOINIT
         ;
JCIOINIT JMP $E4C1
;------------------------------------------------
         ORG $E471

         ;
         ; skok do TESTROM
         ;
JTESTROM JMP $F223
;------------------------------------------------
         ORG $E474

         ;
         ; skok do RESETWM
         ;
JRESETWM JMP $C290
;------------------------------------------------
         ORG $E477

         ;
         ; skok do RESETCD
         ;
JRESETCD JMP $C2C8
;------------------------------------------------
         ORG $E47A

         ;
         ; skok do CASRDBL
         ;
JCASRDBL JMP $FD8D
;------------------------------------------------
         ORG $E47D

         ;
         ; skok do CASOPIN
         ;
JCASOPIN JMP $FCF7
;------------------------------------------------
         ORG $E480

         ;
         ; skok do SWITROM
         ;
JSWITROM JMP $F223
;------------------------------------------------
         ORG $E483

         ;
         ; skok do TESTST
         ;
JTESTST  JMP $5006
;------------------------------------------------
         ORG $E486

         ;
         ; skok do NEWDEV
         ;
JNEWDEV  JMP $EEBC
;------------------------------------------------
         ORG $E489

         ;
         ; skok do UNLINK
         ;
JUNLINK  JMP $E915
;------------------------------------------------
         ORG $E48C

         ;
         ; skok do E898
         ;
JE898    JMP $E898
;------------------------------------------------
         ORG $E48F

         ;
         ; tabela adresowa nowych urządzeń
         ;
CALTAB   dta $90,$C9,$95,$C9,$9A,$C9,$9F,$C9
         dta $A4,$C9,$A9,$C9
;------------------------------------------------
         ORG $E49B

         ;
         ; skok do NEWINIT
         ;
NEWINITC JMP $C90C
         dta $13,$03,$0F,$13,$04,$02,$01,$A8
         dta $03,$07,$00,$28,$00,$B7,$92,$AB
         dta $4C,$22,$72,$04,$00,$00,$00,$00
         dta $00,$00,$00,$00,$00,$00,$00,$00
         dta $00,$00,$60
;------------------------------------------------
         ORG $E4C1

         ;
         ; inicjowanie obsługi urządzeń
         ;
CIOINIT  LDX #$00
         LDA #$FF
         STA $0340,X
         LDA #$DB
         STA $0346,X
         LDA #$E4
         STA $0347,X
         TXA
         CLC
         ADC #$10
         TAX
         CMP #$80
         BCC *-22
         RTS
;------------------------------------------------
         ORG $E4DC

         ;
         ; kanał I/O nie otwarty
         ;
CIONOPN  LDY #$85
         RTS
;------------------------------------------------
         ORG $E4DF

         ;
         ; procedura obsługi urządzeń
         ;
CIOMAIN  STA $2F
         STX $2E
         TXA
         AND #$0F
         BNE *+6
         CPX #$80
         BCC *+7
         LDY #$86
         JMP $E670
         LDY #$00
         LDA $0340,X
         STA.W $0020,Y
         INX
         INY
         CPY #$0C
         BCC *-10
         LDA $20
         CMP #$7F
         BNE *+23
         LDA $22
         CMP #$0C
         BEQ *+115
         LDA $02E9
         BNE *+7
;------------------------------------------------
         ORG $E510

         ;
         ; błąd: urządzenie nie istnieje
         ;
NEXDER   LDY #$82
         JMP $E670
         JSR $CA29
         BMI *-6
         LDY #$84
         LDA $22
         CMP #$03
         BCC *+39
         TAY
         CPY #$0E
         BCC *+4
         LDY #$0E
         STY $17
         LDA $E72A,Y
         BEQ *+17
         CMP #$02
         BEQ *+74
         CMP #$08
         BCS *+97
         CMP #$04
         BEQ *+120
         JMP $E61E
;------------------------------------------------
         ORG $E53F

         ;
         ; procedura otwarcia kanału IOCB
         ;
CIOOPN   LDA $20
         CMP #$FF
         BEQ *+7
         LDY #$81
         JMP $E670
         LDA $02E9
         BNE *+41
         JSR $E6FF
         BCS *+36
         LDA #$00
         STA $02EA
         STA $02EB
;------------------------------------------------
         ORG $E55C

         ;
         ; przygotowanie otwarcia IOCB
         ;
INIOPN   JSR $E695
         BCS *-24
         JSR $E6EA
         LDA #$0B
         STA $17
         JSR $E695
         LDA $2C
         STA $26
         LDA $2D
         STA $27
         JMP $E672
         JSR $EEF9
         JMP $E670
;------------------------------------------------
         ORG $E57C

         ;
         ; procedura zamknięcia kanału IOCB
         ;
CIOCLS   LDY #$01
         STY $23
         JSR $E695
         BCS *+5
         JSR $E6EA
         LDA #$FF
         STA $20
         LDA #$E4
         STA $27
         LDA #$DB
         STA $26
         JMP $E672
;------------------------------------------------
         ORG $E597

         ;
         ; odczyt statusu i operacje specjalne CIO
         ;
CIOSTSP  LDA $20
         CMP #$FF
         BNE *+7
         JSR $E6FF
         BCS *-89
         JSR $E695
         JSR $E6EA
         LDX $2E
         LDA $0340,X
         STA $20
         JMP $E672
;------------------------------------------------
         ORG $E5B2

         ;
         ; odczyt z kanału IOCB
         ;
CIOREAD  LDA $22
         AND $2A
         BNE *+7
         LDY #$83
         JMP $E670
         JSR $E695
         BCS *-6
         LDA $28
         ORA $29
         BNE *+10
         JSR $E6EA
         STA $2F
         JMP $E672
         JSR $E6EA
         STA $2F
         BMI *+67
         LDY #$00
         STA ($24),Y
         JSR $E6D1
         LDA $22
         AND #$02
         BNE *+14
         LDA $2F
         CMP #$9B
         BNE *+8
         JSR $E6BB
         JMP $E618
         JSR $E6BB
         BNE *-35
         LDA $22
         AND #$02
         BNE *+31
         JSR $E6EA
         STA $2F
         BMI *+12
         LDA $2F
         CMP #$9B
         BNE *-11
         LDA #$89
         STA $23
         JSR $E6C8
         LDY #$00
         LDA #$9B
         STA ($24),Y
         JSR $E6D1
         JSR $E6D8
         JMP $E672
;------------------------------------------------
         ORG $E61E

         ;
         ; zapis do kanału IOCB
         ;
CIOWRT   LDA $22
         AND $2A
         BNE *+7
         LDY #$87
         JMP $E670
         JSR $E695
         BCS *-6
         LDA $28
         ORA $29
         BNE *+8
         LDA $2F
         INC $28
         BNE *+8
         LDY #$00
         LDA ($24),Y
         STA $2F
         JSR $E6EA
         PHP
         JSR $E6D1
         JSR $E6BB
         PLP
         BMI *+31
         LDA $22
         AND #$02
         BNE *+8
         LDA $2F
         CMP #$9B
         BEQ *+19
         LDA $28
         ORA $29
         BNE *-35
         LDA $22
         AND #$02
         BNE *+7
         LDA #$9B
         JSR $E6EA
         JSR $E6D8
         JMP $E672
;------------------------------------------------
         ORG $E670

         ;
         ; powrót z procedury CIO
         ;
CIORET   STY $23
;------------------------------------------------
         ORG $E672

         ;
         ; zakończenie operacji CIO
         ;
CPLCIO   LDY $2E
         LDA $0344,Y
         STA $24
         LDA $0345,Y
         STA $25
         LDX #$00
         STX $02E9
         LDA $20,X
         STA $0340,Y
         INX
         INY
         CPX #$0C
         BCC *-9
         LDA $2F
         LDX $2E
         LDY $23
         RTS
;------------------------------------------------
         ORG $E695

         ;
         ; ustalenie adresu procedury operacji I/O
         ;
CMPENT   LDY $20
         CPY #$22
         BCC *+6
         LDY #$85
         BCS *+29
         LDA $031B,Y
         STA $2C
         LDA $031C,Y
         STA $2D
         LDY $17
         LDA $E72A,Y
         TAY
         LDA ($2C),Y
         TAX
         INY
         LDA ($2C),Y
         STA $2D
         STX $2C
         CLC
         RTS
;------------------------------------------------
         ORG $E6BB

         ;
         ; zmniejszenie długości bufora danych
         ;
DECBUFL  LDA $28
         BNE *+4
         DEC $29
         DEC $28
         LDA $28
         ORA $29
         RTS
;------------------------------------------------
         ORG $E6C8

         ;
         ; zmniejszenie adresu bufora danych
         ;
DECBUFP  LDA $24
         BNE *+4
         DEC $25
         DEC $24
         RTS
;------------------------------------------------
         ORG $E6D1

         ;
         ; zwiększenie adresu bufora danych
         ;
INCBUFP  INC $24
         BNE *+4
         INC $25
         RTS
;------------------------------------------------
         ORG $E6D8

         ;
         ; zmniejszenie długości bufora danych
         ;
SUBBUFL  LDX $2E
         SEC
         LDA $0348,X
         SBC $28
         STA $28
         LDA $0349,X
         SBC $29
         STA $29
         RTS
;------------------------------------------------
         ORG $E6EA

         ;
         ; przejście do procedury operacji I/O
         ;
GOHAND   LDY #$92
         JSR $E6F4
         STY $23
         CPY #$00
         RTS
;------------------------------------------------
         ORG $E6F4

         ;
         ; skok do procedury według adresu ze stosu
         ;
CIOJMP   TAX
         LDA $2D
         PHA
         LDA $2C
         PHA
         TXA
         LDX $2E
         RTS
;------------------------------------------------
         ORG $E6FF

         ;
         ; ustalenie numeru urządzenia
         ;
DEVNUM   SEC
         LDY #$01
         LDA ($24),Y
         SBC #$31
         BMI *+6
         CMP #$09
         BCC *+4
         LDA #$00
         STA $21
         INC $21
;------------------------------------------------
         ORG $E712

         ;
         ; poszukiwanie urządzenia w HATABS
         ;
DVSRCH   LDY #$00
         LDA ($24),Y
;------------------------------------------------
         ORG $E716

         ;
         ; poszukiwanie urządzenia w HATABS
         ;
FDVHND   BEQ *+14
         LDY #$21
         CMP $031A,Y
         BEQ *+11
         DEY
         DEY
         DEY
         BPL *-8
         LDY #$82
         SEC
         RTS
         TYA
         STA $20
         CLC
         RTS
;------------------------------------------------
         ORG $E72D

         ;
         ; tabela indeksów adresów operacji I/O
         ;
COMTAB   dta $00,$04,$04,$04,$04,$06,$06,$06
         dta $06,$02,$08,$0A
;------------------------------------------------
         ORG $E739

         ;
         ; procedura dołączania urządzeń
         ;
         ;
         ; procedura dołączania urządzeń
         ;
LINKSOM  LDA $08
         BEQ *+39
         LDA #$E9
         STA $4A
         LDA #$03
         STA $4B
         LDY #$12
         CLC
         LDA ($4A),Y
         TAX
         INY
         ADC ($4A),Y
         BEQ *+40
         LDA ($4A),Y
         STA $4B
         STX $4A
         JSR $CB56
         BNE *+29
         JSR $E894
         BCS *+24
         BCC *-27
         LDA #$00
         STA $03FB
         STA $03FC
         LDA #$4F
         BNE *+47
         LDA #$00
         TAY
         JSR $E7BE
         BPL *+3
         RTS
         CLC
         LDA $02E7
         ADC $02EA
         STA $0312
         LDA $02E8
         ADC $02EB
         STA $0313
         SEC
         LDA $02E5
         SBC $0312
         LDA $02E6
         SBC $0313
         BCS *+11
         LDA #$4E
         TAY
         JSR $E7BE
         JMP $E76E
         LDA $02EC
         LDX $02E7
         STX $02EC
         LDX $02E8
         STX $02ED
         JSR $E7DE
         BMI *-27
         SEC
         JSR $E89E
         BCS *-33
         BCC *-78
;------------------------------------------------
         ORG $E7BE

         ;
         ; inicjowanie SIO dla nowego urządzenia
         ;
DCBINI   PHA
         LDX #$09
         LDA $E7D4,X
         STA $0300,X
         DEX
         BPL *-7
         STY $030B
         PLA
         STA $030A
         JMP $E459
;------------------------------------------------
         ORG $E7D4

         ;
         ; tabela wartości do inicjowania SIO
         ;
TSIOIN   dta $4F,$01,$40,$40,$EA,$02,$1E,$00
         dta $04,$00
;------------------------------------------------
         ORG $E7DE

         ;
         ; inicjowanie odczytu z nowego urządzenia
         ;
INITLD   STA $0313
         LDX #$00
         STX $0312
         DEX
         STX $0315
         LDA $02EC
         ROR
         BCC *+10
         INC $02EC
         BNE *+5
         INC $02ED
         LDA $02EC
         STA $02D1
         LDA $02ED
         STA $02D2
         LDA #$16
         STA $02CF
         LDA #$E8
         STA $02D0
         LDA #$80
         STA $02D3
         JMP $C745
;------------------------------------------------
         ORG $E816

         ;
         ; odczyt bajtu z nowego urządzenia
         ;
GETBYT   LDX $0315
         INX
         STX $0315
         BEQ *+10
         LDX $0315
         LDA $037D,X
         CLC
         RTS
         LDA #$80
         STA $0315
         JSR $E833
         BPL *-16
         SEC
         RTS
;------------------------------------------------
         ORG $E833

         ;
         ; odczyt bloku z nowego urządzenia
         ;
GTNXBL   LDX #$0B
         LDA $E851,X
         STA $0300,X
         DEX
         BPL *-7
         LDX $0312
         STX $030A
         INX
         STX $0312
         LDA $0313
         STA $0300
         JMP $E459
;------------------------------------------------
         ORG $E851

         ;
         ; tabela parametrów DCB dla GTNXBL
         ;
SIOTAB   dta $00,$01,$26,$40,$FD,$03,$1E,$00
         dta $80,$00,$00,$00
;------------------------------------------------
         ORG $E85D

         ;
         ; przeszukiwanie listy liniowej
         ;
SRCHLS   STY $0312
         STA $0313
         LDA #$E9
         STA $4A
         LDA #$03
         STA $4B
         LDY #$12
         LDA ($4A),Y
         TAX
         INY
         LDA ($4A),Y
         CMP $0313
         BNE *+9
         CPX $0312
         BNE *+4
         CLC
         RTS
         CMP #$00
         BNE *+8
         CPX #$00
         BNE *+4
         SEC
         RTS
         STX $4A
         STA $4B
         JSR $CB56
         BNE *-9
         BEQ *-39
;------------------------------------------------
         ORG $E894

         ;
         ; dołączanie elementu przy gorącym starcie
         ;
LINKWM   SEC
         PHP
         BCS *+42
         STA $02ED
         STY $02EC
;------------------------------------------------
         ORG $E89E

         ;
         ; dołączanie elementu przy zimnym starcie
         ;
LINKCD   PHP
         LDA #$00
         TAY
         JSR $E85D
         BCS *+41
         LDY #$12
         LDA $02EC
         STA ($4A),Y
         TAX
         INY
         LDA $02ED
         STA ($4A),Y
         STX $4A
         STA $4B
         LDA #$00
         STA ($4A),Y
         DEY
         STA ($4A),Y
         JSR $E900
         BCC *+14
         LDA $02ED
         LDY $02EC
         JSR $E915
         PLP
         SEC
         RTS
         PLP
         BCS *+11
         LDA #$00
         LDY #$10
         STA ($4A),Y
         INY
         STA ($4A),Y
         CLC
         LDY #$10
         LDA $02E7
         ADC ($4A),Y
         STA $02E7
         INY
         LDA $02E8
         ADC ($4A),Y
         STA $02E8
         LDY #$0F
         LDA #$00
         STA ($4A),Y
         JSR $CB56
         LDY #$0F
         STA ($4A),Y
         CLC
         RTS
;------------------------------------------------
         ORG $E900

         ;
         ; tabela wektorów nowych urządzeń
         ;
CALVEC   dta $18,$A5,$4A,$69,$0C,$8D,$12,$03
         dta $A5,$4B,$69,$00,$8D,$13,$03,$6C
         dta $12,$03,$4C,$72,$C2
;------------------------------------------------
         ORG $E915

         ;
         ; usunięcie elementu z listy liniowej
         ;
UNLINK   JSR $E85D
         BCS *+61
         TAY
         LDA $4A
         PHA
         LDA $4B
         PHA
         STX $4A
         STY $4B
         LDA $0244
         BNE *+17
         LDY #$10
         CLC
         LDA ($4A),Y
         INY
         ADC ($4A),Y
         BNE *+33
         JSR $CB56
         BNE *+28
         LDY #$12
         LDA ($4A),Y
         TAX
         INY
         LDA ($4A),Y
         TAY
         PLA
         STA $4B
         PLA
         STA $4A
         TYA
         LDY #$13
         STA ($4A),Y
         DEY
         TXA
         STA ($4A),Y
         CLC
         RTS
         PLA
         PLA
         SEC
         RTS
         dta $00,$00,$4C,$33,$C9
;------------------------------------------------
         ORG $E95C

         ;
         ; inicjowanie złącza szeregowego
         ;
SIOINIT  LDA #$3C
         STA $D302
         LDA #$3C
         STA $D303
         LDA #$03
         STA $0232
         STA $41
         STA $D20F
         RTS
;------------------------------------------------
         ORG $E971

         ;
         ; obsługa złącza szeregowego
         ;
SIO      TSX
         STX $0318
         LDA #$01
         STA $42
         LDA $0300
         CMP #$60
         BNE *+5
         JMP $EB9D
         LDA #$00
         STA $030F
         LDA #$01
         STA $02BD
         LDA #$0D
         STA $029C
         LDA #$28
         STA $D204
         LDA #$00
         STA $D206
         CLC
         LDA $0300
         ADC $0301
         ADC #$FF
         STA $023A
         LDA $0302
         STA $023B
         LDA $030A
         STA $023C
         LDA $030B
         STA $023D
         CLC
         LDA #$3A
         STA $32
         ADC #$04
         STA $34
         LDA #$02
         STA $33
         STA $35
         LDA #$34
         STA $D303
         JSR $ECAF
         LDA $023F
         BNE *+5
         TYA
         BNE *+10
         DEC $029C
         BPL *-74
         JMP $EA22
         LDA $0303
         BPL *+15
         LDA #$0D
         STA $029C
         JSR $EB87
         JSR $ECAF
         BEQ *+49
         JSR $EC9A
         LDA #$00
         STA $023F
         JSR $ECC0
         BEQ *+20
         BIT $0303
         BVS *+9
         LDA $023F
         BNE *+26
         BEQ *+32
         JSR $EB87
         JSR $EAFD
         LDA $023F
         BEQ *+7
         LDA $0319
         STA $30
         LDA $30
         CMP #$01
         BEQ *+10
         DEC $02BD
         BMI *+5
         JMP $E98D
;------------------------------------------------
         ORG $EA2A

         ;
         ; zakończenie operacji SIO
         ;
CLPSIO   JSR $EC84
         LDA #$00
         STA $42
         LDY $30
         STY $0303
         RTS
;------------------------------------------------
         ORG $EA37

         ;
         ; oczekiwanie na potwierdzenie
         ;
WAIT     LDA #$00
         STA $023F
         CLC
         LDA #$3E
         STA $32
         ADC #$01
         STA $34
         LDA #$02
         STA $33
         STA $35
         LDA #$FF
         STA $3C
         JSR $EAFD
         LDY #$FF
         LDA $30
         CMP #$01
         BNE *+27
         LDA $023E
         CMP #$41
         BEQ *+35
         CMP #$43
         BEQ *+31
         CMP #$45
         BNE *+8
         LDA #$90
         STA $30
         BNE *+6
         LDA #$8B
         STA $30
         LDA $30
         CMP #$8A
         BEQ *+9
         LDA #$FF
         STA $023F
         BNE *+4
         LDY #$00
         LDA $30
         STA $0319
         RTS
;------------------------------------------------
         ORG $EA88

         ;
         ; nadawanie na szynę szeregową
         ;
SEND     LDA #$01
         STA $30
         JSR $EC17
         LDY #$00
         STY $31
         STY $3B
         STY $3A
         LDA ($32),Y
         STA $31
         STA $D20D
         LDA $11
         BNE *+5
         JMP $EDC7
         LDA $3A
         BEQ *-9
         JSR $EC84
         RTS
;------------------------------------------------
         ORG $EAAD

         ;
         ; przerwanie zapisu danych
         ;
ISRODN   TYA
         PHA
         INC $32
         BNE *+4
         INC $33
         LDA $32
         CMP $34
         LDA $33
         SBC $35
         BCC *+30
         LDA $3B
         BNE *+13
         LDA $31
         STA $D20D
         LDA #$FF
         STA $3B
         BNE *+11
         LDA $10
         ORA #$08
         STA $10
         STA $D20E
         PLA
         TAY
         PLA
         RTI
         LDY #$00
         LDA ($32),Y
         STA $D20D
         CLC
         ADC $31
         ADC #$00
         STA $31
         JMP $EAD7
;------------------------------------------------
         ORG $EAEC

         ;
         ; przerwanie końca transmisji
         ;
ISRXD    LDA $3B
         BEQ *+13
         STA $3A
         LDA $10
         AND #$F7
         STA $10
         STA $D20E
         PLA
         RTI
;------------------------------------------------
         ORG $EAFD

         ;
         ; procedura odczytu SIO
         ;
RECEIV   LDA #$00
         LDY $030F
         BNE *+4
         STA $31
         STA $38
         STA $39
         LDA #$01
         STA $30
         JSR $EC40
         LDA #$3C
         STA $D303
         LDA $11
         BNE *+5
         JMP $EDC7
         LDA $0317
         BEQ *+7
         LDA $39
         BEQ *-14
         RTS
;------------------------------------------------
         ORG $EB27

         ;
         ; sygnalizacja błędu Timeout
         ;
ITIMOT   LDA #$8A
         STA $30
         RTS
         dta $98,$48
;------------------------------------------------
         ORG $EB2E

         ;
         ; przerwanie odczytu danych
         ;
ISRSIR   LDA $D20F
         STA $D20A
         BMI *+6
         LDY #$8C
         STY $30
         AND #$20
         BNE *+6
         LDY #$8E
         STY $30
         LDA $38
         BEQ *+21
         LDA $D20D
         CMP $31
         BEQ *+6
         LDY #$8F
         STY $30
         LDA #$FF
         STA $39
         PLA
         TAY
         PLA
         RTI
         LDA $D20D
         LDY #$00
         STA ($32),Y
         CLC
         ADC $31
         ADC #$00
         STA $31
         INC $32
         BNE *+4
         INC $33
         LDA $32
         CMP $34
         LDA $33
         SBC $35
         BCC *-32
         LDA $3C
         BEQ *+8
         LDA #$00
         STA $3C
         BEQ *-46
         LDA #$FF
         STA $38
         BNE *-48
;------------------------------------------------
         ORG $EB87

         ;
         ; przepisanie adresu i długości bufora
         ;
LODPTR   CLC
         LDA $0304
         STA $32
         ADC $0308
         STA $34
         LDA $0305
         STA $33
         ADC $0309
         STA $35
         RTS
;------------------------------------------------
         ORG $EB9D

         ;
         ; procedura SIO dla magnetofonu
         ;
CASENT   LDA $0303
         BPL *+52
         LDA #$CC
         STA $D204
         LDA #$05
         STA $D206
         JSR $EC17
         LDX $62
         LDY $EE15,X
         LDA $030B
         BMI *+5
         LDY $EE11,X
         LDX #$00
         JSR $EDE2
         LDA #$34
         STA $D302
         LDA $0317
         BNE *-3
         JSR $EB87
         JSR $EA88
         JMP $EC04
         LDA #$FF
         STA $030F
         LDX $62
         LDY $EE17,X
         LDA $030B
         BMI *+5
         LDY $EE13,X
         LDX #$00
         JSR $EDE2
         LDA #$34
         STA $D302
         LDA $0317
         BNE *-3
         JSR $EB87
         JSR $EC9A
         JSR $EDE2
         JSR $ED3D
         JSR $EAFD
         LDA $030B
         BMI *+7
         LDA #$3C
         STA $D302
         JMP $EA2A
;------------------------------------------------
         ORG $EC11

         ;
         ; przerwanie licznika 1
         ;
TIM1INT  LDA #$00
         STA $0317
         RTS
;------------------------------------------------
         ORG $EC17

         ;
         ; zezwolenie na zapis danych
         ;
SNDENBL  LDA #$07
         AND $0232
         ORA #$20
         LDY $0300
         CPY #$60
         BNE *+14
         ORA #$08
         LDY #$07
         STY $D202
         LDY #$05
         STY $D200
         STA $0232
         STA $D20F
         LDA #$C7
         AND $10
         ORA #$10
         JMP $EC56
;------------------------------------------------
         ORG $EC40

         ;
         ; zezwolenie na odczyt danych
         ;
RECVEN   LDA #$07
         AND $0232
         ORA #$10
         STA $0232
         STA $D20F
         STA $D20A
         LDA #$C7
         AND $10
         ORA #$20
;------------------------------------------------
         ORG $EC56

         ;
         ; zezwolenie na transmisję
         ;
ENABLE   STA $10
         STA $D20E
         LDA #$28
         STA $D208
         LDX #$06
         LDA #$A8
         LDY $41
         BNE *+4
         LDA #$A0
         STA $D201,X
         DEX
         DEX
         BPL *-5
         LDA #$A0
         STA $D205
         LDY $0300
         CPY #$60
         BEQ *+8
         STA $D201
         STA $D203
         RTS
;------------------------------------------------
         ORG $EC84

         ;
         ; zabronienie zapisu danych
         ;
SNDDIS   NOP
         LDA #$C7
         AND $10
         STA $10
         STA $D20E
         LDX #$06
         LDA #$00
         STA $D201,X
         DEX
         DEX
         BPL *-5
         RTS
;------------------------------------------------
         ORG $EC9A

         ;
         ; ustalenie Timeout
         ;
SETTOT   LDA $0306
         ROR
         ROR
         TAY
         AND #$3F
         TAX
         TYA
         ROR
         AND #$C0
         TAY
         RTS
         dta $2C,$EB,$AD,$EA,$EC,$EA
;------------------------------------------------
         ORG $ECAF

         ;
         ; rozpoczęcie operacji zapisu
         ;
SENDIN   LDX #$01
         LDY #$FF
         DEY
         BNE *-1
         DEX
         BNE *-6
         JSR $EA88
         LDY #$02
         LDX #$00
;------------------------------------------------
         ORG $ECC0

         ;
         ; ustawienie Timeout i oczekiwanie
         ;
STIMWT   JSR $EDE2
         JSR $EA37
         TYA
         RTS
;------------------------------------------------
         ORG $ECC8

         ;
         ; obliczenie rzeczywistej szybkości odczytu
         ;
COMPUT   STA $0310
         STY $0311
         JSR $ED2E
         STA $0310
         LDA $030C
         JSR $ED2E
         STA $030C
         LDA $0310
         SEC
         SBC $030C
         STA $0312
         LDA $0311
         SEC
         SBC $030D
         TAY
         LDX $62
         LDA #$00
         SEC
         SBC $EE19,X
         CLC
         ADC $EE19,X
         DEY
         BPL *-5
         CLC
         ADC $0312
         TAY
         LSR
         LSR
         LSR
         ASL
         SEC
         SBC #$16
         TAX
         TYA
         AND #$07
         TAY
         LDA #$F5
         CLC
         ADC #$0B
         DEY
         BPL *-4
         LDY #$00
         SEC
         SBC #$07
         BPL *+3
         DEY
         CLC
         ADC $EDF9,X
         STA $02EE
         TYA
         ADC $EDFA,X
         STA $02EF
         RTS
;------------------------------------------------
         ORG $ED2E

         ;
         ; poprawienie licznika w/g systemu TV
         ;
ADJUST   CMP #$7C
         BMI *+6
         SEC
         SBC #$7C
         RTS
         CLC
         LDX $62
         ADC $EE1B,X
         RTS
;------------------------------------------------
         ORG $ED3D

         ;
         ; rozpoczęcie odczytu z magnetofonu
         ;
BEGNRD   LDA $11
         BNE *+5
         JMP $EDC7
         SEI
         LDA $0317
         BNE *+4
         BEQ *+39
         LDA $D20F
         AND #$10
         BNE *-20
         STA $0316
         LDX $D40B
         LDY $14
         STX $030C
         STY $030D
         LDX #$01
         STX $0315
         LDY #$0A
         LDA $11
         BEQ *+93
         LDA $0317
         BNE *+6
         CLI
         JMP $EB27
         LDA $D20F
         AND #$10
         CMP $0316
         BEQ *-21
         STA $0316
         DEY
         BNE *-27
         DEC $0315
         BMI *+14
         LDA $D40B
         LDY $14
         JSR $ECC8
         LDY #$09
         BNE *-44
         LDA $02EE
         STA $D204
         LDA $02EF
         STA $D206
         LDA #$00
         STA $D20F
         LDA $0232
         STA $D20F
         LDA #$55
         STA ($32),Y
         INY
         STA ($32),Y
         LDA #$AA
         STA $31
         CLC
         LDA $32
         ADC #$02
         STA $32
         LDA $33
         ADC #$00
         STA $33
         CLI
         RTS
;------------------------------------------------
         ORG $EDC7

         ;
         ; obsługa klawisza BREAK
         ;
PRBRKK   JSR $EC84
         LDA #$3C
         STA $D302
         LDA #$3C
         STA $D303
         LDA #$80
         STA $30
         LDX $0318
         TXS
         DEC $11
         CLI
         JMP $EA2A
;------------------------------------------------
         ORG $EDE2

         ;
         ; ustawienie przerwania TIMCNT1
         ;
SETT1V   LDA #$11
         STA $0226
         LDA #$EC
         STA $0227
         LDA #$01
         SEI
         JSR $E45C
         LDA #$01
         STA $0317
         CLI
         RTS
;------------------------------------------------
         ORG $EDF9

         ;
         ; tabela współczynników szybkości transmisji
         ;
POKTAB   dta $E8,$03,$43,$04,$9E,$04,$F9,$04
         dta $54,$05,$AF,$05,$0A,$06,$65,$06
         dta $C0,$06,$1A,$07,$75,$07,$D0,$07
;------------------------------------------------
         ORG $EE11

         ;
         ; tabela współczynników systemu TV
         ;
STVCTB   dta $B4,$96,$78,$64,$0F,$0D,$0A,$08
         dta $83,$9C
;------------------------------------------------
         ORG $EE1B

         ;
         ; tabela poprawek licznika
         ;
ADJTAB   dta $07,$20
;------------------------------------------------
         ORG $EE1D

         ;
         ; tabela adresów pamięci obrazu
         ;
TSMAL    dta $18,$10,$0A,$0A,$10,$1C,$34,$64
         dta $C4,$C4,$C4,$C4,$1C,$10,$64,$C4
;------------------------------------------------
         ORG $EE2D

         ;
         ; tabela wielkości programów ANTIC-a
         ;
TDLEC    dta $17,$17,$0B,$17,$2F,$2F,$5F,$5F
         dta $61,$61,$61,$61,$17,$0B,$BF,$61
         dta $13,$13,$09,$13,$27,$27,$4F,$4F
         dta $41,$41,$41,$41,$13,$09,$9F,$41
;------------------------------------------------
         ORG $EE4D

         ;
         ; tabela trybów ANTIC-a
         ;
TAGRM    dta $02,$06,$07,$08,$09,$0A,$0B,$0D
         dta $0F,$0F,$0F,$0F,$04,$05,$0C,$0E
;------------------------------------------------
         ORG $EE5D

         ;
         ; tabela wielkości trybów ANTIC-a
         ;
TDLVL    dta $00,$00,$00,$00,$00,$00,$00,$01
         dta $01,$01,$01,$01,$00,$00,$01,$01
;------------------------------------------------
         ORG $EE6D

         ;
         ; tabela przesunięć do obliczania adresu
         ;
TLSHC    dta $03,$02,$02,$01,$01,$02,$02,$03
         dta $03,$03,$03,$03,$03,$03,$02,$03
;------------------------------------------------
         ORG $EE7D

         ;
         ; tabela wielkości kolumn obrazu
         ;
TMCCN    dta $28,$14,$14,$28,$50,$50,$A0,$A0
         dta $40,$50,$50,$50,$28,$28,$A0,$A0
;------------------------------------------------
         ORG $EE8D

         ;
         ; tabela wielkości wierszy obrazu
         ;
TMRCN    dta $18,$18,$0C,$18,$30,$30,$60,$60
         dta $C0,$C0,$C0,$C0,$18,$0C,$C0,$C0
;------------------------------------------------
         ORG $EE9D

         ;
         ; tabela przesunięć do obliczania adresu
         ;
TRSHC    dta $00,$00,$00,$02,$03,$02,$03,$02
         dta $03,$01,$01,$01,$00,$00,$03,$02
;------------------------------------------------
         ORG $EEAD

         ;
         ; tabela masek bitowych dla obrazu
         ;
TDMSK    dta $FF,$F0,$0F,$C0,$30,$0C,$03
;------------------------------------------------
         ORG $EEB4

         ;
         ; tabela masek bitowych
         ;
MSKTAB   dta $80,$40,$20,$10,$08,$04,$02,$01
;------------------------------------------------
         ORG $EEBC

         ;
         ; wpisanie nowego urządzenia do HATABS
         ;
NEWDEV   PHA
         TYA
         PHA
         TXA
         LDX #$00
         CMP $031A,X
         BEQ *+32
         INX
         INX
         INX
         CPX #$22
         BMI *-10
         LDX #$00
         TAY
         LDA #$00
         CMP $031A,X
         BEQ *+21
         INX
         INX
         INX
         CPX #$22
         BMI *-10
         PLA
         PLA
         LDY #$FF
         SEC
         RTS
         PLA
         TAY
         PLA
         INX
         SEC
         RTS
         TYA
         STA $031A,X
         PLA
         STA $031B,X
         PLA
         STA $031C,X
         CLC
         RTS
;------------------------------------------------
         ORG $EEF9

         ;
         ; specjalna procedura obsługi I/O
         ;
SPCHND   LDY #$00
         LDA ($24),Y
         LDY $21
         JSR $E7BE
         BPL *+5
         LDY #$82
         RTS
         LDA #$7F
         STA $20
         LDA #$25
         STA $26
         LDA #$EF
         STA $27
         LDA $02EC
         LDX.W $002E
         STA $034D,X
         LDY #$00
         LDA ($24),Y
         STA $034C,X
         LDY #$01
         RTS
;------------------------------------------------
         ORG $EF26

         ;
         ; procedura obsługi nowego urządzenia
         ;
PUTBYT   PHA
         TXA
         PHA
         AND #$0F
         BNE *+18
         CPX #$80
         BPL *+14
         LDA $02E9
         BNE *+13
         LDY #$82
         PLA
         PLA
         CPY #$00
         RTS
         LDY #$86
         BMI *-7
         STX.W $002E
         LDY #$00
         LDA $0340,X
         STA.W $0020,Y
         INX
         INY
         CPY #$0C
         BMI *-10
         JSR $CA29
         BMI *-29
         PLA
         TAX
         PLA
         TAY
         LDA $27
         PHA
         LDA $26
         PHA
         TYA
         LDY #$92
         RTS
         dta $00,$00,$00,$00,$00,$00,$4C,$05
         dta $FD
;------------------------------------------------
         ORG $EF6E

         ;
         ; inicjowanie edytora
         ;
POWERON  LDA #$FF
         STA $02FC
         LDA $02E4
         STA $6A
         LDA #$40
         STA $02BE
         LDA #$51
         STA $79
         LDA #$FB
         STA $7A
         LDA #$11
         STA $60
         LDA #$FC
         STA $61
         RTS
;------------------------------------------------
         ORG $EF8E

         ;
         ; otwarcie kanału dla ekranu
         ;
SCOPN    LDA $2B
         AND #$0F
         BNE *+10
;------------------------------------------------
         ORG $EF94

         ;
         ; otwarcie kanału dla edytora
         ;
EDOPN    LDA $2A
         AND #$0F
         STA $2A
         LDA #$00
         STA $57
         CMP #$10
         BCC *+7
         LDA #$91
         JMP $F154
         LDA #$E0
         STA $02F4
         LDA #$CC
         STA $026B
         LDA #$02
         STA $02F3
         STA $022F
         LDA #$01
         STA $4C
         LDA #$C0
         ORA $10
         STA $10
         STA $D20E
         LDA #$40
         STA $D40E
         BIT $026E
         BPL *+14
         LDA #$C4
         STA $0200
         LDA #$FC
         STA $0201
         LDA #$C0
         STA $D40E
         LDA #$00
         STA $0293
         STA $64
         STA $7B
         STA $02F0
         LDY #$0E
         LDA #$01
         STA $02A3,Y
         DEY
         BPL *-4
         LDX #$04
         LDA $FB08,X
         STA $02C4,X
         DEX
         BPL *-7
         LDY $6A
         DEY
         STY $0295
         LDA #$60
         STA $0294
         LDX $57
         LDA $EE4D,X
         STA $51
         LDA $6A
         STA $65
         LDY $EE1D,X
         LDA #$28
         JSR $F57A
         DEY
         BNE *-6
         LDA $026F
         AND #$3F
         STA $67
         TAY
         CPX #$08
         BCC *+33
         CPX #$0F
         BEQ *+15
         CPX #$0C
         BCS *+25
         TXA
         ROR
         ROR
         ROR
         AND #$C0
         ORA $67
         TAY
         LDA #$10
         JSR $F57A
         CPX #$0B
         BNE *+7
         LDA #$06
         STA $02C8
         STY $026F
         LDA $64
         STA $58
         LDA $65
         STA $59
         LDA $D40B
         CMP #$7A
         BNE *-5
         JSR $F578
         LDA $EE5D,X
         BEQ *+8
         LDA #$FF
         STA $64
         DEC $65
         JSR $F565
         LDA $64
         STA $68
         LDA $65
         STA $69
         LDA #$41
         JSR $F570
         STX $66
         LDA #$18
         STA $02BF
         LDA $57
         CMP #$0C
         BCS *+6
         CMP #$09
         BCS *+59
         LDA $2A
         AND #$10
         BEQ *+53
         LDA #$04
         STA $02BF
         LDX #$02
         LDA $026E
         BEQ *+5
         JSR $F5A0
         LDA #$02
         JSR $F569
         DEX
         BPL *-6
         LDY $6A
         DEY
         TYA
         JSR $F570
         LDA #$60
         JSR $F570
         LDA #$42
         JSR $F569
         CLC
         LDA #$10
         ADC $66
         TAY
         LDX $EE2D,Y
         BNE *+23
         LDY $66
         LDX $EE2D,Y
         LDA $57
         BNE *+14
         LDA $026E
         BEQ *+9
         JSR $F5A0
         LDA #$22
         STA $51
         LDA $51
         JSR $F570
         DEX
         BNE *-6
         LDA $57
         CMP #$08
         BCC *+40
         CMP #$0F
         BEQ *+6
         CMP #$0C
         BCS *+32
         LDX #$5D
         LDA $6A
         SEC
         SBC #$10
         JSR $F570
         LDA #$00
         JSR $F570
         LDA $51
         ORA #$40
         JSR $F570
         LDA $51
         JSR $F570
         DEX
         BNE *-6
         LDA $59
         JSR $F570
         LDA $58
         JSR $F570
         LDA $51
         ORA #$40
         JSR $F570
         LDA #$70
         JSR $F570
         LDA #$70
         JSR $F570
         LDA $64
         STA $0230
         LDA $65
         STA $0231
         LDA #$70
         JSR $F570
         LDA $64
         STA $02E5
         LDA $65
         STA $02E6
         LDY #$01
         LDA $0230
         STA ($68),Y
         INY
         LDA $0231
         STA ($68),Y
         LDA $4C
         BPL *+18
         STA $03EC
         JSR $EF94
         LDA $03EC
         LDY #$00
         STY $03EC
         TAY
         RTS
         LDA $2A
         AND #$20
         BNE *+13
         JSR $F420
         STA $0290
         LDA $52
         STA $0291
         LDA #$22
         ORA $022F
         STA $022F
         JMP $F20B
;------------------------------------------------
         ORG $F180

         ;
         ; odczyt znaku z ekranu
         ;
GETCH    JSR $F6CA
         JSR $F18F
         JSR $F76A
         JSR $F60A
         JMP $F21E
;------------------------------------------------
         ORG $F18F

         ;
         ; odczyt punktu z ekranu
         ;
GETPLT   JSR $F5AC
         LDA ($64),Y
         AND $02A0
         LSR $6F
         BCS *+5
         LSR
         BPL *-5
         STA $02FA
         CMP #$00
         RTS
;------------------------------------------------
         ORG $F1A4

         ;
         ; zapis znaku na ekranie
         ;
OUTCH    STA $02FB
         CMP #$7D
         BNE *+8
         JSR $F420
         JMP $F20B
         JSR $F6CA
;------------------------------------------------
         ORG $F1B4

         ;
         ; porównanie znaku z RETURN ($9B)
         ;
TSTRET   LDA $02FB
         CMP #$9B
         BNE *+8
         JSR $F661
         JMP $F20B
         JSR $F1CA
         JSR $F60E
         JMP $F20B
;------------------------------------------------
         ORG $F1CA

         ;
         ; zapis punktu na ekranie
         ;
OUTPLT   LDA $02FF
         BNE *-3
         LDX #$02
         LDA $54,X
         STA $5A,X
         DEX
         BPL *-5
         LDA $02FB
         TAY
         ROL
         ROL
         ROL
         ROL
         AND #$03
         TAX
         TYA
         AND #$9F
         ORA $FB49,X
;------------------------------------------------
         ORG $F1E9

         ;
         ; przekształcenie znaku na ekranie
         ;
DISPLY   STA $02FA
         JSR $F5AC
         LDA $02FA
         LSR $6F
         BCS *+6
         ASL
         JMP $F1F2
         AND $02A0
         STA $50
         LDA $02A0
         EOR #$FF
         AND ($64),Y
         ORA $50
         STA ($64),Y
         RTS
;------------------------------------------------
         ORG $F20B

         ;
         ; powrót z procedur monitora
         ;
RETURM   JSR $F18F
         STA $5D
         LDX $57
         BNE *+12
         LDX $02F0
         BNE *+7
         EOR #$80
         JSR $F1E9
;------------------------------------------------
         ORG $F21E

         ;
         ; otwarcie kanału dla klawiatury
         ;
KBOPN    LDY $4C
         JMP $F226
;------------------------------------------------
         ORG $F223

         ;
         ; skok do SWITROM
         ;
TESTROM  JMP $C8FC
         LDA #$01
         STA $4C
         LDA $02FB
;------------------------------------------------
         ORG $F22D

         ;
         ; procedura specjalna dla edytora
         ;
EDSP     RTS
;------------------------------------------------
         ORG $F22E

         ;
         ; zamknięcie kanału dla ekranu
         ;
SCRFIN   BIT $026E
         BPL *-19
         LDA #$40
         STA $D40E
         LDA #$00
         STA $026E
         LDA #$CE
         STA $0200
         LDA #$C0
         STA $0201
         JMP $EF94
;------------------------------------------------
         ORG $F24A

         ;
         ; odczyt znaku z edytora
         ;
EGETCH   JSR $F962
         JSR $F6BC
         LDA $6B
         BNE *+54
         LDA $54
         STA $6C
         LDA $55
         STA $6D
         JSR $F2FD
         STY $4C
         LDA $02FB
         CMP #$9B
         BEQ *+20
         JSR $F2BE
         JSR $F962
         LDA $63
         CMP #$71
         BNE *+5
         JSR $F556
         JMP $F25C
         JSR $F718
         JSR $F8B1
         LDA $6C
         STA $54
         LDA $6D
         STA $55
         LDA $6B
         BEQ *+19
         DEC $6B
         BEQ *+15
         LDA $4C
         BMI *-6
         JSR $F180
         STA $02FB
         JMP $F962
         JSR $F661
         LDA #$9B
         STA $02FB
         JSR $F20B
         STY $4C
         JMP $F962
;------------------------------------------------
         ORG $F2AD

         ;
         ; skok pośredni do procedury
         ;
JSRIND   JMP ($0064)
;------------------------------------------------
         ORG $F2B0

         ;
         ; zapis znaku do edytora
         ;
EOUTCH   STA $02FB
         JSR $F962
         JSR $F6BC
         LDA #$00
         STA $03E8
;------------------------------------------------
         ORG $F2BE

         ;
         ; obsługa znaku w edytorze
         ;
PRCCHR   JSR $F718
         JSR $F93C
         BEQ *+11
         ASL $02A2
         JSR $F1B4
         JMP $F962
         LDA $02FE
         ORA $02A2
         BNE *-15
         ASL $02A2
         INX
         LDA $03E8
         BEQ *+7
         TXA
         CLC
         ADC #$2D
         TAX
         LDA $FB0D,X
         STA $64
         LDA $FB0E,X
         STA $65
         JSR $F2AD
         JSR $F20B
         JMP $F962
;------------------------------------------------
         ORG $F2F8

         ;
         ; odczyt następnego znaku z klawiatury
         ;
IGNORE   LDA #$FF
         STA $02FC
;------------------------------------------------
         ORG $F2FD

         ;
         ; odczyt znaku z klawiatury
         ;
KBGBYT   LDA #$00
         STA $03E8
;------------------------------------------------
         ORG $F302

         ;
         ; pobranie znaku z klawiatury
         ;
KGETCH   LDA $2A
         LSR
         BCS *+113
         LDA #$80
         LDX $11
         BEQ *+103
         LDA $02FC
         CMP #$FF
         BEQ *-21
         STA $7C
         LDX #$FF
         STX $02FC
         LDX $02DB
         BNE *+5
         JSR $F983
         TAY
         CPY #$C0
         BCS *-46
         LDA ($79),Y
         STA $02FB
         TAX
         BMI *+5
         JMP $F3B4
         CMP #$80
         BEQ *-61
         CMP #$81
         BNE *+12
         LDA $02B6
         EOR #$80
         STA $02B6
         BCS *-75
         CMP #$82
         BNE *+14
         LDA $02BE
         BEQ *+13
         LDA #$00
         STA $02BE
         BEQ *-91
         CMP #$83
         BNE *+9
         LDA #$40
         STA $02BE
         BNE *-102
         CMP #$84
         BNE *+10
         LDA #$80
         STA $02BE
         JMP $F2F8
         CMP #$85
         BNE *+13
         LDA #$88
         STA $4C
         STA $11
         LDA #$9B
         JMP $F3DA
         CMP #$89
         BNE *+18
         LDA $02DB
         EOR #$FF
         STA $02DB
         BNE *+5
         JSR $F983
         JMP $F2F8
         CMP #$8E
         BCS *+20
         CMP #$8A
         BCC *-9
         SBC #$8A
         ASL $7C
         BPL *+4
         ORA #$04
         TAY
         LDA ($60),Y
         JMP $F32A
         CMP #$92
         BCS *+13
         CMP #$8E
         BCC *-31
         SBC #$72
         INC $03E8
         BNE *+40
         LDA $7C
         CMP #$40
         BCS *+23
         LDA $02FB
         CMP #$61
         BCC *+16
         CMP #$7B
         BCS *+12
         LDA $02BE
         BEQ *+7
         ORA $7C
         JMP $F323
         JSR $F93C
         BEQ *+11
         LDA $02FB
         EOR $02B6
         STA $02FB
         JMP $F21E
;------------------------------------------------
         ORG $F3E0

         ;
         ; procedura znaku "Escape"
         ;
ESCAPE   LDA #$80
         STA $02A2
         RTS
;------------------------------------------------
         ORG $F3E6

         ;
         ; kursor o jeden wiersz w górę
         ;
CRSUP    DEC $54
         BPL *+8
         LDX $02BF
         DEX
         STX $54
         JMP $F90C
;------------------------------------------------
         ORG $F3F3

         ;
         ; kursor o jeden wiersz w dół
         ;
CRSDWN   INC $54
         LDA $54
         CMP $02BF
         BCC *-10
         LDX #$00
         BEQ *-16
;------------------------------------------------
         ORG $F400

         ;
         ; kursor o jeden znak w lewo
         ;
CRSLFT   DEC $55
         LDA $55
         BMI *+6
         CMP $52
         BCS *+6
;------------------------------------------------
         ORG $F40A

         ;
         ; kursor do prawego marginesu
         ;
CRSRMR   LDA $53
         STA $55
         JMP $F88E
;------------------------------------------------
         ORG $F411

         ;
         ; kursor o jeden znak w prawo
         ;
CRSRGT   INC $55
         LDA $55
         CMP $53
         BCC *-9
         BEQ *-11
;------------------------------------------------
         ORG $F41B

         ;
         ; kursor do lewego marginesu
         ;
CRSLMR   LDA $52
         JMP $F40C
;------------------------------------------------
         ORG $F420

         ;
         ; czyszczenie ekranu
         ;
CLRSCR   JSR $F9A6
         LDY $64
         LDA #$00
         STA $64
         STA ($64),Y
         INY
         BNE *-3
         INC $65
         LDX $65
         CPX $6A
         BCC *-11
         LDA #$FF
         STA $02B2,Y
         INY
         CPY #$04
         BCC *-6
;------------------------------------------------
         ORG $F440

         ;
         ; kursor do lewego, górnego rogu ekranu
         ;
CRSHOM   JSR $F997
         STA $63
         STA $6D
         LDA #$00
         STA $54
         STA $56
         STA $6C
         RTS
;------------------------------------------------
         ORG $F450

         ;
         ; kasowanie znaku w lewo od kursora
         ;
CRSBS    LDA $63
         CMP $52
         BEQ *+35
         LDA $55
         CMP $52
         BNE *+5
         JSR $F923
         JSR $F400
         LDA $55
         CMP $53
         BNE *+9
         LDA $54
         BEQ *+5
         JSR $F3E6
         LDA #$20
         STA $02FB
         JSR $F1CA
         JMP $F88E
;------------------------------------------------
         ORG $F47A

         ;
         ; kursor na następną pozycję tabulacji
         ;
CRSTAB   JSR $F411
         LDA $55
         CMP $52
         BNE *+10
         JSR $F665
         JSR $F758
         BCS *+9
         LDA $63
         JSR $F75D
         BCC *-22
         JMP $F88E
;------------------------------------------------
         ORG $F495

         ;
         ; ustawianie pozycji tabulacji
         ;
CRSSTB   LDA $63
         JMP $F73E
;------------------------------------------------
         ORG $F49A

         ;
         ; kasowanie pozycji tabulacji
         ;
CRSCTB   LDA $63
         JMP $F74A
;------------------------------------------------
         ORG $F49F

         ;
         ; wstawienie znaku pod kursorem
         ;
INSCHR   JSR $F94C
         JSR $F18F
         STA $7D
         LDA #$00
         STA $02BB
         JSR $F1E9
         LDA $63
         PHA
         JSR $F612
         PLA
         CMP $63
         BCS *+14
         LDA $7D
         PHA
         JSR $F18F
         STA $7D
         PLA
         JMP $F4AC
         JSR $F957
         DEC $02BB
         BMI *+6
         DEC $54
         BNE *-7
         JMP $F88E
;------------------------------------------------
         ORG $F4D5

         ;
         ; usunięcie znaku spod kursora
         ;
DELCHR   JSR $F94C
         JSR $F5AC
         LDA $64
         STA $68
         LDA $65
         STA $69
         LDA $63
         PHA
         JSR $F60A
         PLA
         CMP $63
         BCS *+18
         LDA $54
         CMP $02BF
         BCS *+11
         JSR $F18F
         LDY #$00
         STA ($68),Y
         BEQ *-36
         LDY #$00
         TYA
         STA ($68),Y
         JSR $F918
         JSR $F957
         JMP $F88E
;------------------------------------------------
         ORG $F50C

         ;
         ; wstawienie linii pod kursorem
         ;
INSLIN   SEC
;------------------------------------------------
         ORG $F50D

         ;
         ; wstawienie linii pod kursorem
         ;
INSLN2   JSR $F7C2
         LDA $52
         STA $55
         JSR $F5AC
         JSR $F78E
         JSR $F7E2
         JMP $F88E
;------------------------------------------------
         ORG $F520

         ;
         ; usunięcie linii spod kursora
         ;
DELLIN   JSR $F88E
         LDY $51
         STY $54
;------------------------------------------------
         ORG $F527

         ;
         ; usunięcie linii fizycznej
         ;
DELROW   LDY $54
         TYA
         SEC
         JSR $F75B
         PHP
         TYA
         CLC
         ADC #$78
         PLP
         JSR $F73C
         INY
         CPY #$18
         BNE *-17
         LDA $02B4
         ORA #$01
         STA $02B4
         LDA #$00
         STA $55
         JSR $F5AC
         JSR $F82A
         JSR $F758
         BCC *-42
         JMP $F41B
;------------------------------------------------
         ORG $F556

         ;
         ; brzęczyk edytora
         ;
BELL     LDY #$20
         JSR $F983
         DEY
         BPL *-4
         RTS
;------------------------------------------------
         ORG $F55F

         ;
         ; kursor do lewego, dolnego rogu
         ;
BTMLIN   JSR $F440
         JMP $F3E6
;------------------------------------------------
         ORG $F565

         ;
         ; dwukrotne zmniejszenie dwubajtowego wektora
         ;
DBDEC    LDA #$02
         BNE *+19
;------------------------------------------------
         ORG $F569

         ;
         ; ustawienie parametrów przesuwu obrazu
         ;
STDFS    LDY $026E
         BEQ *+4
         ORA #$20
;------------------------------------------------
         ORG $F570

         ;
         ; ustawienie parametrów obrazu
         ;
STDDSP   LDY $4C
         BMI *+45
         LDY #$00
         STA ($64),Y
;------------------------------------------------
         ORG $F578

         ;
         ; jednokrotne zmniejszenie dwubajtowego wektora
         ;
SGDEC    LDA #$01
;------------------------------------------------
         ORG $F57A

         ;
         ; zmniejszenie wektora według akumulatora
         ;
DCUSAC   STA $029E
         LDA $4C
         BMI *+32
         LDA $64
         SEC
         SBC $029E
         STA $64
         BCS *+4
         DEC $65
         LDA $0F
         CMP $65
         BCC *+14
         BNE *+8
         LDA $0E
         CMP $64
         BCC *+6
         LDA #$93
         STA $4C
         RTS
;------------------------------------------------
         ORG $F5A0

         ;
         ; ustawienie adresu DL przy przesuwie obrazu
         ;
SSDLE    LDA #$02
         JSR $F570
         LDA #$A2
         JSR $F570
         DEX
         RTS
;------------------------------------------------
         ORG $F5AC

         ;
         ; zamiana pozycji kursora na adres
         ;
CONVRT   LDX #$01
         STX $66
         DEX
         STX $65
         LDA $54
         ASL
         ROL $65
         ASL
         ROL $65
         ADC $54
         STA $64
         BCC *+4
         INC $65
         LDY $57
         LDX $EE6D,Y
         ASL $64
         ROL $65
         DEX
         BNE *-5
         LDA $56
         LSR
         LDA $55
         LDX $EE9D,Y
         BEQ *+8
         ROR
         ASL $66
         DEX
         BNE *-4
         ADC $64
         BCC *+4
         INC $65
         CLC
         ADC $58
         STA $64
         STA $5E
         LDA $65
         ADC $59
         STA $65
         STA $5F
         LDX $EE9D,Y
         LDA $FB04,X
         AND $55
         ADC $66
         TAY
         LDA $EEAC,Y
         STA $02A0
         STA $6F
         LDY #$00
         RTS
;------------------------------------------------
         ORG $F60A

         ;
         ; zwiększenie pozycji kursora
         ;
INCRSB   LDA #$00
         BEQ *+4
;------------------------------------------------
         ORG $F60E

         ;
         ; koniec wiersza logicznego
         ;
EOLSUB   LDA #$9B
         STA $7D
;------------------------------------------------
         ORG $F612

         ;
         ; sprawdzenie końca wiersza logicznego
         ;
SCRIBT   INC $63
         INC $55
         BNE *+4
         INC $56
         LDA $55
         LDX $57
         CMP $EE7D,X
         BEQ *+12
         CPX #$00
         BNE *-28
         CMP $53
         BEQ *-32
         BCC *-34
         CPX #$08
         BNE *+6
         LDA $56
         BEQ *-42
         LDA $57
         BNE *+46
         LDA $63
         CMP #$51
         BCC *+12
         LDA $7D
         BEQ *+36
         JSR $F661
         JMP $F6AB
         JSR $F665
         LDA $54
         CLC
         ADC #$78
         JSR $F75D
         BCC *+10
         LDA $7D
         BEQ *+6
         CLC
         JSR $F50D
         JMP $F88E
;------------------------------------------------
         ORG $F661

         ;
         ; przesunięcie ekranu z dodaniem wiersza
         ;
RTWSCR   LDA #$9B
         STA $7D
;------------------------------------------------
         ORG $F665

         ;
         ; umieszczenie znaku RETURN
         ;
RETURN   JSR $F997
         LDA #$00
         STA $56
         INC $54
         LDX $57
         LDY #$18
         BIT $7B
         BPL *+7
         LDY #$04
         TYA
         BNE *+5
         LDA $EE8D,X
         CMP $54
         BNE *+43
         STY $029D
         TXA
         BNE *+37
         LDA $7D
         BEQ *+33
         CMP #$9B
         BEQ *+3
         CLC
         JSR $F7F7
         INC $02BB
         DEC $6C
         BPL *+4
         INC $6C
         DEC $029D
         LDA $02B2
         SEC
         BPL *-19
         LDA $029D
         STA $54
         JMP $F88E
;------------------------------------------------
         ORG $F6AE

         ;
         ; aktualizacja wartości ROWAC lub COLAC
         ;
SUBEND   SEC
         LDA $70,X
         SBC $74
         STA $70,X
         LDA $71,X
         SBC $75
         STA $71,X
         RTS
;------------------------------------------------
         ORG $F6BC

         ;
         ; sprawdzenie zakresu edytora
         ;
ERANGE   LDA $02BF
         CMP #$04
         BEQ *+9
         LDA $57
         BEQ *+5
         JSR $EF94
;------------------------------------------------
         ORG $F6CA

         ;
         ; sprawdzenie zakresu ekranu
         ;
RANGE    LDA #$27
         CMP $53
         BCS *+4
         STA $53
         LDX $57
         LDA $EE8D,X
         CMP $54
         BCC *+44
         BEQ *+42
         CPX #$08
         BNE *+12
         LDA $56
         BEQ *+21
         CMP #$01
         BNE *+30
         BEQ *+6
         LDA $56
         BNE *+24
         LDA $EE7D,X
         CMP $55
         BCC *+17
         BEQ *+15
         LDA #$01
         STA $4C
         LDA #$80
         LDX $11
         STA $11
         BEQ *+8
         RTS
         JSR $F440
         LDA #$8D
         STA $4C
         PLA
         PLA
         LDA $7B
         BPL *+5
         JMP $F962
         JMP $F21E
;------------------------------------------------
         ORG $F718

         ;
         ; odtworzenie znaku spod kursora
         ;
OFFCRS   LDY #$00
         LDA $5F
         BEQ *+6
         LDA $5D
         STA ($5E),Y
         RTS
;------------------------------------------------
         ORG $F723

         ;
         ; zamiana znaku na maskę bitową
         ;
BITCON   PHA
         AND #$07
         TAX
         LDA $EEB4,X
         STA $6E
         PLA
         LSR
         LSR
         LSR
         TAX
         RTS
;------------------------------------------------
         ORG $F732

         ;
         ; przesunięcie LOGMAP o jeden bit w lewo
         ;
BITROL   ROL $02B4
         ROL $02B3
         ROL $02B2
         RTS
;------------------------------------------------
         ORG $F73C

         ;
         ; ustawienie bitu w TABMAP
         ;
BITPUT   BCC *+14
;------------------------------------------------
         ORG $F73E

         ;
         ; ustawienie bitu w TABMAP
         ;
BITPT2   JSR $F723
         LDA $02A3,X
         ORA $6E
         STA $02A3,X
         RTS
;------------------------------------------------
         ORG $F74A

         ;
         ; skasowanie bitu w TABMAP
         ;
BITCLR   JSR $F723
         LDA $6E
         EOR #$FF
         AND $02A3,X
         STA $02A3,X
         RTS
;------------------------------------------------
         ORG $F758

         ;
         ; obliczenie wiersza logicznego
         ;
LOGGET   LDA $54
;------------------------------------------------
         ORG $F75A

         ;
         ; obliczenie wiersza logicznego
         ;
LGET2    CLC
;------------------------------------------------
         ORG $F75B

         ;
         ; obliczenie wiersza logicznego
         ;
LGET3    ADC #$78
;------------------------------------------------
         ORG $F75D

         ;
         ; obliczenie maski bitowej
         ;
BITGET   JSR $F723
         CLC
         LDA $02A3,X
         AND $6E
         BEQ *+3
         SEC
         RTS
;------------------------------------------------
         ORG $F76A

         ;
         ; zamiana kodu Internal na ATASCII
         ;
INATAC   LDA $02FA
         LDY $57
         CPY #$0E
         BCS *+25
         CPY #$0C
         BCS *+6
         CPY #$03
         BCS *+17
         ROL
         ROL
         ROL
         ROL
         AND #$03
         TAX
         LDA $02FA
         AND #$9F
         ORA $FB4D,X
         STA $02FB
         RTS
;------------------------------------------------
         ORG $F78E

         ;
         ; dodanie nowego wiersza na ekranie
         ;
LININS   LDX $6A
         DEX
         STX $69
         STX $67
         LDA #$B0
         STA $68
         LDA #$D8
         STA $66
         LDX $54
         INX
         CPX $02BF
         BEQ *-22
         LDY #$27
         LDA ($68),Y
         STA ($66),Y
         DEY
         BPL *-5
         SEC
         LDA $68
         STA $66
         SBC #$28
         STA $68
         LDA $69
         STA $67
         SBC #$00
         STA $69
         JMP $F79F
;------------------------------------------------
         ORG $F7C2

         ;
         ; dodanie do LOGMAP nowego wiersza
         ;
EXTEND   PHP
         LDY #$16
         TYA
         JSR $F75A
         PHP
         TYA
         CLC
         ADC #$79
         PLP
         JSR $F73C
         DEY
         BMI *+6
         CPY $54
         BCS *-18
         LDA $54
         CLC
         ADC #$78
         PLP
         JMP $F73C
;------------------------------------------------
         ORG $F7E2

         ;
         ; skasowanie zawartości linii na ekranie
         ;
CLRLIN   LDA $52
         STA $55
         JSR $F5AC
         SEC
         LDA $53
         SBC $52
         TAY
         LDA #$00
         STA ($64),Y
         DEY
         BPL *-3
         RTS
;------------------------------------------------
         ORG $F7F7

         ;
         ; wykonanie przesunięcia obrazu
         ;
DOSCR    JSR $F732
         LDA $026E
         BEQ *+42
         LDA $026C
         BNE *-3
         LDA #$08
         STA $026C
         LDA $026C
         CMP #$01
         BNE *-5
         LDA $D40B
         CMP #$40
         BCS *-5
         LDX #$0D
         LDA $02BF
         CMP #$04
         BNE *+4
         LDX #$70
         CPX $D40B
         BCS *-3
         JSR $F9A6
;------------------------------------------------
         ORG $F82A

         ;
         ; obliczenie adresu linii obrazu
         ;
COMADR   LDA $64
         LDX $65
         INX
         CPX $6A
         BEQ *+8
         SEC
         SBC #$10
         JMP $F82E
         ADC #$27
         BNE *+12
         LDX $65
         INX
         CPX $6A
         BEQ *+58
         CLC
         ADC #$10
         TAY
         STA $7E
         SEC
         LDA $64
         SBC $7E
         STA $64
         BCS *+4
         DEC $65
         LDA $64
         CLC
         ADC #$28
         STA $7E
         LDA $65
         ADC #$00
         STA $7F
         LDA ($7E),Y
         STA ($64),Y
         INY
         BNE *-5
         LDY #$10
         LDA $64
         CMP #$D8
         BEQ *+13
         CLC
         ADC #$F0
         STA $64
         BCC *-33
         INC $65
         BNE *-37
         LDX $6A
         DEX
         STX $7F
         LDX #$D8
         STX $7E
         LDA #$00
         LDY #$27
         STA ($7E),Y
         DEY
         BPL *-3
;------------------------------------------------
         ORG $F88E

         ;
         ; obliczenie wiersza logicznego
         ;
COMLOG   LDA #$00
         STA $63
         LDA $54
         STA $51
         LDA $51
         JSR $F75A
         BCS *+14
         LDA $63
         CLC
         ADC #$28
         STA $63
         DEC $51
         JMP $F896
         CLC
         LDA $63
         ADC $55
         STA $63
         RTS
;------------------------------------------------
         ORG $F8B1

         ;
         ; obliczenie chwilowej długości wiersza
         ;
DOBUFC   JSR $F94C
         LDA $63
         PHA
         LDA $6C
         STA $54
         LDA $6D
         STA $55
         LDA #$01
         STA $6B
         LDX #$17
         LDA $7B
         BPL *+4
         LDX #$03
         CPX $54
         BNE *+13
         LDA $55
         CMP $53
         BNE *+7
         INC $6B
         JMP $F8EA
         JSR $F60A
         INC $6B
         LDA $63
         CMP $52
         BNE *-32
         DEC $54
         JSR $F400
         JSR $F18F
         BNE *+25
         DEC $6B
         LDA $63
         CMP $52
         BEQ *+17
         JSR $F400
         LDA $55
         CMP $53
         BNE *+4
         DEC $54
         LDA $6B
         BNE *-26
         PLA
         STA $63
         JMP $F957
;------------------------------------------------
         ORG $F90C

         ;
         ; zapis początku bufora wiersza
         ;
STRBEG   JSR $F88E
         LDA $51
         STA $6C
         LDA $52
         STA $6D
         RTS
;------------------------------------------------
         ORG $F918

         ;
         ; skasowanie pustej linii ekranu
         ;
DELTIE   LDA $63
         CMP $52
         BNE *+4
         DEC $54
         JSR $F88E
;------------------------------------------------
         ORG $F923

         ;
         ; skasowanie pustej linii ekranu
         ;
DELEML   LDA $63
         CMP $52
         BEQ *-16
         JSR $F5AC
         LDA $53
         SEC
         SBC $52
         TAY
         LDA ($64),Y
         BNE *-29
         DEY
         BPL *-5
         JMP $F527
;------------------------------------------------
         ORG $F93C

         ;
         ; sprawdzenie znaków kontrolnych
         ;
TSTCNT   LDX #$2D
         LDA $FB0D,X
         CMP $02FB
         BEQ *+7
         DEX
         DEX
         DEX
         BPL *-11
         RTS
;------------------------------------------------
         ORG $F94C

         ;
         ; zapamiętanie pozycji kursora
         ;
PHACRS   LDX #$02
         LDA $54,X
         STA $02B8,X
         DEX
         BPL *-6
         RTS
;------------------------------------------------
         ORG $F957

         ;
         ; odtworzenie pozycji kursora
         ;
PLACRS   LDX #$02
         LDA $02B8,X
         STA $54,X
         DEX
         BPL *-6
         RTS
;------------------------------------------------
         ORG $F962

         ;
         ; przełączanie między ekranem a oknem
         ;
SWAP     LDA $02BF
         CMP #$18
         BEQ *+25
         LDX #$0B
         LDA $54,X
         PHA
         LDA $0290,X
         STA $54,X
         PLA
         STA $0290,X
         DEX
         BPL *-13
         LDA $7B
         EOR #$FF
         STA $7B
         JMP $F21E
;------------------------------------------------
         ORG $F983

         ;
         ; dźwięk klawiatury
         ;
KEYCLK   LDX #$7E
         PHA
         STX $D01F
         LDA $D40B
         CMP $D40B
         BEQ *-3
         DEX
         DEX
         BPL *-13
         PLA
         RTS
;------------------------------------------------
         ORG $F997

         ;
         ; kursor na lewej krawędzi obrazu
         ;
SCLED    LDA #$00
         LDX $7B
         BNE *+6
         LDX $57
         BNE *+4
         LDA $52
         STA $55
         RTS
;------------------------------------------------
         ORG $F9A6

         ;
         ; przepisanie adresu pamięci obrazu
         ;
PUTMSC   LDA $58
         STA $64
         LDA $59
         STA $65
         RTS
;------------------------------------------------
         ORG $F9AF

         ;
         ; procedura specjalna dla ekranu
         ;
DRAW     LDX #$00
         LDA $22
         CMP #$11
         BEQ *+10
         CMP #$12
         BEQ *+5
         LDY #$84
         RTS
         INX
         STX $02B7
         LDA $54
         STA $02F5
         LDA $55
         STA $02F6
         LDA $56
         STA $02F7
         LDA #$01
         STA $02F8
         STA $02F9
         SEC
         LDA $02F5
         SBC $5A
         STA $76
         BCS *+16
         LDA #$FF
         STA $02F8
         LDA $76
         EOR #$FF
         CLC
         ADC #$01
         STA $76
         SEC
         LDA $02F6
         SBC $5B
         STA $77
         LDA $02F7
         SBC $5C
         STA $78
         BCS *+25
         LDA #$FF
         STA $02F9
         LDA $77
         EOR #$FF
         STA $77
         LDA $78
         EOR #$FF
         STA $78
         INC $77
         BNE *+4
         INC $78
         LDX #$02
         LDY #$00
         STY $73
         TYA
         STA $70,X
         LDA $5A,X
         STA $54,X
         DEX
         BPL *-8
         LDA $77
         INX
         TAY
         LDA $78
         STA $7F
         STA $75
         BNE *+13
         LDA $77
         CMP $76
         BCS *+7
         LDA $76
         LDX #$02
         TAY
         TYA
         STA $7E
         STA $74
         PHA
         LDA $75
         LSR
         PLA
         ROR
         STA $70,X
         LDA $7E
         ORA $7F
         BNE *+5
         JMP $FB01
         CLC
         LDA $70
         ADC $76
         STA $70
         BCC *+4
         INC $71
         LDA $71
         CMP $75
         BCC *+23
         BNE *+8
         LDA $70
         CMP $74
         BCC *+15
         CLC
         LDA $54
         ADC $02F8
         STA $54
         LDX #$00
         JSR $F6AE
         CLC
         LDA $72
         ADC $77
         STA $72
         LDA $73
         ADC $78
         STA $73
         CMP $75
         BCC *+42
         BNE *+8
         LDA $72
         CMP $74
         BCC *+34
         BIT $02F9
         BPL *+18
         DEC $55
         LDA $55
         CMP #$FF
         BNE *+16
         LDA $56
         BEQ *+12
         DEC $56
         BPL *+8
         INC $55
         BNE *+4
         INC $56
         LDX #$02
         JSR $F6AE
         JSR $F6CA
         JSR $F1CA
         LDA $02B7
         BEQ *+49
         JSR $F94C
         LDA $02FB
         STA $02BC
         LDA $54
         PHA
         JSR $F612
         PLA
         STA $54
         JSR $F6CA
         JSR $F18F
         BNE *+14
         LDA $02FD
         STA $02FB
         JSR $F1CA
         JMP $FAC9
         LDA $02BC
         STA $02FB
         JSR $F957
         SEC
         LDA $7E
         SBC #$01
         STA $7E
         LDA $7F
         SBC #$00
         STA $7F
         BMI *+5
         JMP $FA4D
         JMP $F21E
;------------------------------------------------
         ORG $FB04

         ;
         ; tabela numerów masek bitowych obrazu
         ;
TBMSK    dta $00,$01,$03,$07
;------------------------------------------------
         ORG $FB08

         ;
         ; tabela standardowych kolorów obrazu
         ;
COLTAB   dta $28,$CA,$94,$46,$00
;------------------------------------------------
         ORG $FB0D

         ;
         ; tabela wektorów znaków kontrolnych
         ;
CNTRLS   dta $1B,$E0,$F3,$1C,$E6,$F3,$1D,$F3
         dta $F3,$1E,$00,$F4,$1F,$11,$F4,$7D
         dta $20,$F4,$7E,$50,$F4,$7F,$7A,$F4
         dta $9B,$61,$F6,$9C,$20,$F5,$9D,$0C
         dta $F5,$9E,$9A,$F4,$9F,$95,$F4,$FD
         dta $56,$F5,$FE,$D5,$F4,$FF,$9F,$F4
         dta $1C,$40,$F4,$1D,$5F,$F5,$1E,$1B
         dta $F4,$1F,$0A,$F4
;------------------------------------------------
         ORG $FB49

         ;
         ; tabela zamiany z ATASCII na Internal
         ;
AINCC    dta $40,$00,$20,$60
;------------------------------------------------
         ORG $FB4D

         ;
         ; tabela zamiany z Internal na ATASCII
         ;
INACC    dta $20,$40,$00,$60
;------------------------------------------------
         ORG $FB51

         ;
         ; tabela definicji klawiszy
         ;
KEYDEF   dta $6C,$6A,$3B,$8A,$8B,$6B,$2B,$2A
         dta $6F,$80,$70,$75,$9B,$69,$2D,$3D
         dta $76,$80,$63,$8C,$8D,$62,$78,$7A
         dta $34,$80,$33,$36,$1B,$35,$32,$31
         dta $2C,$20,$2E,$6E,$80,$6D,$2F,$81
         dta $72,$80,$65,$79,$7F,$74,$77,$71
         dta $39,$80,$30,$37,$7E,$38,$3C,$3E
         dta $66,$68,$64,$80,$82,$67,$73,$61
         dta $4C,$4A,$3A,$8A,$8B,$4B,$5C,$5E
         dta $4F,$80,$50,$55,$9B,$49,$5F,$7C
         dta $56,$80,$43,$8C,$8D,$42,$58,$5A
         dta $24,$80,$23,$26,$1B,$25,$22,$21
         dta $5B,$20,$5D,$4E,$80,$4D,$3F,$81
         dta $52,$80,$45,$59,$9F,$54,$57,$51
         dta $28,$80,$29,$27,$9C,$40,$7D,$9D
         dta $46,$48,$44,$80,$83,$47,$53,$41
         dta $0C,$0A,$7B,$80,$80,$0B,$1E,$1F
         dta $0F,$80,$10,$15,$9B,$09,$1C,$1D
         dta $16,$80,$03,$89,$80,$02,$18,$1A
         dta $80,$80,$85,$80,$1B,$80,$FD,$80
         dta $00,$20,$60,$0E,$80,$0D,$80,$81
         dta $12,$80,$05,$19,$9E,$14,$17,$11
         dta $80,$80,$80,$80,$FE,$80,$7D,$FF
         dta $06,$08,$04,$80,$84,$07,$13,$01
;------------------------------------------------
         ORG $FC11

         ;
         ; tabela definicji klawiszy funkcyjnych
         ;
FKDEF    dta $1C,$1D,$1E,$1F,$8E,$8F,$90,$91
;------------------------------------------------
         ORG $FC19

         ;
         ; przerwanie IRQ klawiatury
         ;
CPUIRQ   TXA
         PHA
         TYA
         PHA
         LDY $D301
         LDA $D209
         CMP $02F2
         BNE *+7
         LDX $02F1
         BNE *+75
         LDX $026D
         CMP #$83
         BNE *+21
         TXA
         EOR #$FF
         STA $026D
         BNE *+7
         TYA
         ORA #$04
         BNE *+5
         TYA
         AND #$FB
         TAY
         BCS *+40
         TXA
         BNE *+63
         LDA $D209
         TAX
         CMP #$9F
         BNE *+12
         LDA $02FF
         EOR #$FF
         STA $02FF
         BCS *+19
         AND #$3F
         CMP #$11
         BNE *+48
         STX $02DC
         BEQ *+8
         STX $02FC
         STX $02F2
         LDA #$03
         STA $02F1
         LDA #$00
         STA $4D
         LDA $02D9
         STA $022B
         LDA $022F
         BNE *+8
         LDA $02DD
         STA $022F
         STY $D301
         PLA
         TAY
         PLA
         TAX
         PLA
         RTI
         CPX #$84
         BEQ *+35
         CPX #$94
         BNE *-47
         LDA $02F4
         LDX $026B
         STA $026B
         STX $02F4
         CPX #$CC
         BEQ *+8
         TYA
         ORA #$08
         TAY
         BNE *-63
         TYA
         AND #$F7
         TAY
         JMP $FC6D
         LDA $022F
         BEQ *-49
         STA $02DD
         LDA #$00
         STA $022F
         BEQ *-59
;------------------------------------------------
         ORG $FCC4

         ;
         ; przerwanie NMI programu ANTIC-a
         ;
FSDL     PHA
         LDA $02C6
         EOR.W $004F
         AND.W $004E
         STA $D40A
         STA $D017
         PLA
         RTI
         dta $00,$00,$4C,$83,$F9
;------------------------------------------------
         ORG $FCDB

         ;
         ; inicjowanie magnetofonu
         ;
CASINIT  LDA #$CC
         STA $02EE
         LDA #$05
         STA $02EF
;------------------------------------------------
         ORG $FCE5

         ;
         ; procedura specjalna dla magnetofonu
         ;
CASSP    RTS
;------------------------------------------------
         ORG $FCE6

         ;
         ; otwarcie kanału dla magnetofonu
         ;
CASOPN   LDA $2B
         STA $3E
         LDA $2A
         AND #$0C
         CMP #$04
         BEQ *+7
         CMP #$08
         BEQ *+64
         RTS
;------------------------------------------------
         ORG $FCF7

         ;
         ; początek odczytu z magnetofonu
         ;
CASOPIN  LDA #$00
         STA $0289
         STA $3F
         LDA #$01
         JSR $FDFC
         BMI *+43
         LDA #$34
         STA $D302
         LDX $62
         LDY $FE93,X
         LDA $FE91,X
         TAX
         LDA #$03
         STA $022A
         JSR $E45C
         LDA $022A
         BNE *-3
         LDA #$80
         STA $3D
         STA $028A
         JMP $FD77
         LDY #$80
         DEC $11
         LDA #$00
         STA $0289
         RTS
         LDA #$80
         STA $0289
         LDA #$02
         JSR $FDFC
         BMI *-16
         LDA #$CC
         STA $D204
         LDA #$05
         STA $D206
         LDA #$60
         STA $0300
         JSR $E468
         LDA #$34
         STA $D302
         LDX $62
         LDY $FE8F,X
         LDA $FE8D,X
         TAX
         LDA #$03
         JSR $E45C
         LDA #$FF
         STA $022A
         LDA $11
         BEQ *-66
         LDA $022A
         BNE *-7
         LDA #$00
         STA $3D
         LDY #$01
         RTS
;------------------------------------------------
         ORG $FD7A

         ;
         ; odczyt bajtu z magnetofonu
         ;
CASRDBT  LDA $3F
         BMI *+53
         LDX $3D
         CPX $028A
         BEQ *+10
         LDA $0400,X
         INC $3D
         LDY #$01
         RTS
;------------------------------------------------
         ORG $FD8D

         ;
         ; odczyt bloku z magnetofonu
         ;
CASRDBL  LDA #$52
         JSR $FE3F
         TYA
         BMI *-7
         LDA #$00
         STA $3D
         LDX #$80
         LDA $03FF
         CMP #$FE
         BEQ *+15
         CMP #$FA
         BNE *+5
         LDX $047F
         STX $028A
         JMP $FD7A
         DEC $3F
         LDY #$88
         RTS
;------------------------------------------------
         ORG $FDB4

         ;
         ; zapis na magnetofon
         ;
CASWRT   LDX $3D
         STA $0400,X
         INC $3D
         LDY #$01
         CPX #$7F
         BEQ *+3
         RTS
         LDA #$FC
         JSR $FE7C
         LDA #$00
         STA $3D
         RTS
;------------------------------------------------
         ORG $FDCC

         ;
         ; odczyt statusu magnetofonu
         ;
CASST    LDY #$01
         RTS
;------------------------------------------------
         ORG $FDCF

         ;
         ; zamknięcie kanału dla magnetofonu
         ;
CASCLS   LDA $0289
         BMI *+10
         LDY #$01
         LDA #$3C
         STA $D302
         RTS
         LDX $3D
         BEQ *+12
         STX $047F
         LDA #$FA
         JSR $FE7C
         BMI *-18
         LDX #$7F
         LDA #$00
         STA $0400,X
         DEX
         BPL *-4
         LDA #$FE
         JSR $FE7C
         JMP $FDD6
;------------------------------------------------
         ORG $FDFC

         ;
         ; dźwięk i oczekiwanie na naciśnięcie klawisza
         ;
BPWT     STA $40
         LDA $14
         CLC
         LDX $62
         ADC $FE95,X
         TAX
         LDA #$FF
         STA $D01F
         LDA #$00
         LDY #$F0
         DEY
         BNE *-1
         STA $D01F
         LDY #$F0
         DEY
         BNE *-1
         CPX $14
         BNE *-22
         DEC $40
         BEQ *+16
         TXA
         CLC
         LDX $62
         ADC $FE97,X
         TAX
         CPX $14
         BNE *-2
         BEQ *-49
         JSR $FE36
         TYA
         RTS
;------------------------------------------------
         ORG $FE36

         ;
         ; przejście do odczytu klawisza
         ;
PHVRT    LDA $E425
         PHA
         LDA $E424
         PHA
         RTS
;------------------------------------------------
         ORG $FE3F

         ;
         ; ustawienie DCB dla magnetofonu
         ;
SYSBUF   STA $0302
         LDA #$00
         STA $0309
         LDA #$83
         STA $0308
         LDA #$03
         STA $0305
         LDA #$FD
         STA $0304
         LDA #$60
         STA $0300
         LDA #$00
         STA $0301
         LDA #$23
         STA $0306
         LDA $0302
         LDY #$40
         CMP #$52
         BEQ *+4
         LDY #$80
         STY $0303
         LDA $3E
         STA $030B
         JSR $E459
         RTS
;------------------------------------------------
         ORG $FE7C

         ;
         ; przygotowanie do zapisu na magnetofon
         ;
WSIOSB   STA $03FF
         LDA #$55
         STA $03FD
         STA $03FE
         LDA #$57
         JSR $FE3F
         RTS
;------------------------------------------------
         ORG $FE8D

         ;
         ; tabela wartości dla magnetofonu
         ;
TABCAS   dta $04,$03,$80,$C0,$02,$01,$40,$E0
         dta $1E,$19,$0A,$08
;------------------------------------------------
         ORG $FE99

         ;
         ; inicjowanie drukarki
         ;
PRINIT   LDA #$1E
         STA $0314
         RTS
;------------------------------------------------
         ORG $FE9F

         ;
         ; adres bufora statusu drukarki
         ;
PRSTAD   NOP
         DTA $02
;------------------------------------------------
         ORG $FEA1

         ;
         ; adres bufora danych drukarki
         ;
PRCHAR   CPY #$03
;------------------------------------------------
         ORG $FEA3

         ;
         ; odczyt statusu drukarki
         ;
PRSTAT   LDA #$04
         STA $02DF
         LDX $FE9F
         LDY $FEA0
         LDA #$53
         STA $0302
         STA $030A
         JSR $FF14
         JSR $E459
         BMI *+5
         JSR $FF44
;------------------------------------------------
         ORG $FEC1

         ;
         ; procedura specjalna i odczyt z drukarki
         ;
PRRDSP   RTS
;------------------------------------------------
         ORG $FEC2

         ;
         ; otwarcie kanału dla drukarki
         ;
PROPN    JSR $FEA3
         LDA #$00
         STA $02DE
         RTS
;------------------------------------------------
         ORG $FECB

         ;
         ; zapis na drukarkę
         ;
PRWRT    PHA
         LDA $0341,X
         STA $21
         JSR $FF4B
         LDX $02DE
         PLA
         STA $03C0,X
         INX
         CPX $02DF
         BEQ *+23
         STX $02DE
         CMP #$9B
         BEQ *+5
         LDY #$01
         RTS
         LDA #$20
;------------------------------------------------
         ORG $FEED

         ;
         ; wypełnienie bufora drukarki
         ;
FPBUF    STA $03C0,X
         INX
         CPX $02DF
         BNE *-7
         LDA #$00
         STA $02DE
         LDX $FEA1
         LDY $FEA2
         JSR $FF14
         JMP $E459
         dta $20,$4B,$FF,$A9,$9B,$AE,$DE,$02
         dta $D0,$DC,$A0,$01,$60
;------------------------------------------------
         ORG $FF14

         ;
         ; ustawienie DCB dla drukarki
         ;
SETDCB   STX $0304
         STY $0305
         LDA #$40
         STA $0300
         LDA $21
         STA $0301
         LDA #$80
         LDX $0302
         CPX #$53
         BNE *+4
         LDA #$40
         STA $0303
         LDA $02DF
         STA $0308
         LDA #$00
         STA $0309
         LDA $0314
         STA $0306
         RTS
;------------------------------------------------
         ORG $FF44

         ;
         ; ustawienie Timeout dla drukarki
         ;
PRPUT    LDA $02EC
         STA $0314
         RTS
;------------------------------------------------
         ORG $FF4B

         ;
         ; ustalenie trybu pracy drukarki
         ;
PRMODE   LDY #$57
         LDA $2B
         CMP #$4E
         BNE *+6
         LDX #$28
         BNE *+16
         CMP #$44
         BNE *+6
         LDX #$14
         BNE *+8
         CMP #$53
         BNE *+14
         LDX #$1D
         STX $02DF
         STY $0302
         STA $030A
         RTS
         LDA #$4E
         BNE *-34
;------------------------------------------------
         ORG $FF73

         ;
         ; sprawdzenie pierwszej części ROM
         ;
CKROM1   LDX #$00
         STX $8B
         STX $8C
         JSR $FFA9
         CPX #$0C
         BNE *-5
         LDA $C000
         LDX $C001
         CMP $8B
         BNE *+8
         CPX $8C
         BNE *+4
         CLC
         RTS
         SEC
         RTS
;------------------------------------------------
         ORG $FF92

         ;
         ; sprawdzenie drugiej części ROM
         ;
CKROM2   LDX #$00
         STX $8B
         STX $8C
         LDX #$0C
         JSR $FFA9
         JSR $FFA9
         LDA $FFF8
         LDX $FFF9
         JMP $FF86
;------------------------------------------------
         ORG $FFA9

         ;
         ; zliczanie sumy kontrolnej
         ;
GETCKS   LDY #$00
         LDA $FFD7,X
         STA.W $009E,Y
         INX
         INY
         CPY #$04
         BNE *-10
         LDY #$00
         CLC
         LDA ($9E),Y
         ADC $8B
         STA $8B
         BCC *+4
         INC $8C
         INC $9E
         BNE *+4
         INC $9F
         LDA $9E
         CMP $A0
         BNE *-21
         LDA $9F
         CMP $A1
         BNE *-27
         RTS
;------------------------------------------------
         ORG $FFD7

         ;
         ; tabela adresów bloków pamięci ROM
         ;
CKSTAB   dta $02,$C0,$00,$D0,$00,$50,$00,$58
         dta $00,$D8,$00,$E0,$00,$E0,$F8,$FF
         dta $FA,$FF,$00,$00,$00,$00,$00,$01
         dta $03,$85,$02,$42,$42,$00,$00,$01
         dta $03
;------------------------------------------------
         ORG $FFF8

         ;
         ; suma kontrolna drugiej części ROM
         ;
CHSRO2   dta $75,$70
;------------------------------------------------
         ORG $FFFA

         ;
         ; wektor procedury przerwania NMI
         ;
NMIVEC   dta $18,$C0
;------------------------------------------------
         ORG $FFFC

         ;
         ; wektor procedury przerwania RESET
         ;
RESETVEC dta $AA,$C2
;------------------------------------------------
         ORG $FFFE

         ;
         ; wektor procedury przerwania IRQ
         ;
IRQVEC   dta $2C,$C0

