User Tools

Site Tools


base:2mhz_time_crunch_v5_disassembled

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

base:2mhz_time_crunch_v5_disassembled [2015-04-17 04:30] (current)
Line 1: Line 1:
 +===== Disassembly of the 2Mhz Time Cruncher V5.1 =====
 +While browsing through the Web Archive, I had found a machine code monitor disassembly listing for the Time Cruncher V5. The original Time crunch was by Matcham/Network, but Version 5 came along and was done by Tim Rogers (of Stoat and Tim fame). This is probably a modified version of the 2Mhz cruncher, done way back in 1991. So if you can, go disassemble it in a M/C monitor and if works 100% try it out. Feel free to make improvements with the tool.
 +<code>Time Cruncher V5.1 Disassembly.
 +
 +; Some areas of code are relocated before being used. For these parts,
 +; I have shown both addresses in the disassembly.
 +
 +; BASIC PRG ( 1991 SYS2066 )
 +0801   .BY $0B,$08,$C7,$07,$9E,$32,$30,$36
 +0809   .BY $36,$00,$00,$00,$00,$00,$00,$00
 +0811   .BY $00
 +
 +; Start of machine code
 +0812   A2 FF      LDX #$FF
 +0814   9A         TXS
 +0815   A9 06      LDA #$06
 +0817   8D 20 D0   STA $D020   ; blue border
 +081A   20 33 0B   JSR $0B33   ; Display text below on screen
 +
 +; 2MHz TIME CRUNCH V5.1
 +;
 +; LOAD:
 +081D   .BY $93,$0E,$08,$05,$32,$6D,$68,$5A
 +0825   .BY $20,$74,$49,$4D,$45,$20,$63,$52
 +082D   .BY $55,$4E,$43,$48,$20,$76,$35,$2E
 +0835   .BY $31,$20,$20,$20,$20,$20,$20,$20
 +083D   .BY $0D,$20,$20,$20,$20,$20,$20,$20
 +0845   .BY $20,$20,$20,$20,$20,$20,$20,$20
 +084D   .BY $20,$20,$20,$20,$20,$20,$20,$20
 +0855   .BY $20,$20,$20,$20,$20,$20,$20,$20
 +085D   .BY $0D,$0D,$6C,$4F,$41,$44,$20,$3A
 +0865   .BY $00
 +; A lot of extra spaces above!
 +
 +;
 +0866   20 B1 0A   JSR $0AB1   ; Input filename
 +0869   AD 7E 04   LDA $047E   ; get 1st charcter
 +086C   F0 04      BEQ $0872
 +086E   C9 24      CMP #$24   ; @ character
 +0870   D0 05      BNE $0877
 +0872   EA         NOP   ; unused place for JMP
 +0873   EA         NOP   ; Is for access to disk commands
 +0874   EA         NOP   ; but removed form this dissasembly
 +0875   F0 9B      BEQ $0812   ; Restart
 +0877   8A         TXA
 +0878   48         PHA
 +0879   20 30 0B   JSR $0B30   ; Display text below on screen
 +
 +; SAVE@:
 +087C   .BY $73,$41,$56,$45,$40,$3A,$00
 +
 +;
 +0883   20 B1 0A   JSR $0AB1   ; Input filename
 +0886   E8         INX
 +0887   E8         INX   ; add two to filename length
 +0888   86 8E      STX $8E   ; Store filename length
 +088A   20 30 0B   JSR $0B30   ; Display text below on screen
 +
 +; RUN $____
 +088D   .BY $20,$6A,$6D,$70,$20,$24,$A4,$A4
 +0895   .BY $A4,$A4,$9D,$9D,$9D,$9D,$00
 +
 +;
 +089C   20 EA 0A   JSR $0AEA   ; Input two character hex number
 +089F   8D 22 0F   STA $0F22   ; store
 +08A2   20 EA 0A   JSR $0AEA   ; Input two character hex number
 +08A5   8D 21 0F   STA $0F21   ; store
 +08A8   20 30 0B   JSR $0B30   ; Display text below on screen
 +
 +; $01=$__
 +08AB   .BY $20,$24,$30,$31,$3D,$24,$A4,$A4
 +08B3   .BY $9D,$9D,$00
 +
 +;
 +08B6   20 EA 0A   JSR $0AEA   ; Input two character hex number
 +08B9   8D 0F 0F   STA $0F0F   ; store
 +08BC   20 30 0B   JSR $0B30   ; Display text below on screen
 +
 +; STEP $01-$08=$__
 +08BF   .BY $73,$54,$45,$50,$20,$24,$30,$31
 +08C7   .BY $2D,$24,$30,$38,$0D,$20,$20,$20
 +08CF   .BY $20,$20,$24,$A4,$A4,$9D,$9D,$00
 +
 +;
 +08D7   20 EA 0A   JSR $0AEA   ; Input two character hex number
 +08DA   F0 51      BEQ $092D   ; if 0 restart
 +08DC   C9 09      CMP #$09
 +08DE   B0 4D      BCS $092D   ; if more than 8 restart
 +08E0   AA         TAX
 +08E1   8D B8 0D   STA $0DB8   ; store
 +08E4   8D DA 0D   STA $0DDA   ; store
 +08E7   69 07      ADC #$07    ; add 7
 +08E9   8D 2B 0F   STA $0F2B   ; store
 +08EC   A9 01      LDA #$01
 +08EE   0A         ASL
 +08EF   CA         DEX
 +08F0   D0 FC      BNE $08EE
 +08F2   8D 15 0C   STA $0C15   ; store bit position
 +08F5   20 30 0B   JSR $0B30   ; Display text below on screen
 +
 +; SPACE=CRUNCH - RUN/STOP=RESTART
 +08F8   .BY $0D,$73,$50,$41,$43,$45,$20,$3D
 +0900   .BY $20,$63,$52,$55,$4E,$43,$48,$20
 +0908   .BY $20,$2D,$20,$20,$72,$55,$4E,$2F
 +0910   .BY $73,$54,$4F,$50,$20,$3D,$20,$72
 +0918   .BY $45,$53,$54,$41,$52,$54,$00
 +
 +;
 +091F   A9 10      LDA #$10
 +0921   2C 01 DC   BIT $DC01
 +0924   10 07      BPL $092D
 +0926   D0 F9      BNE $0921
 +0928   F0 06      BEQ $0930   ; if space then continue
 +092A   20 42 F6   JSR $F642
 +092D   4C 12 08   JMP $0812   ; restart
 +0930   20 E3 0A   JSR $0AE3   ; Get character under cursor
 +0933   E6 CC      INC $CC   ; cursor off
 +0935   68         PLA
 +0936   A2 7E      LDX #$7E
 +0938   A0 04      LDY #$04
 +093A   20 BD FF   JSR $FFBD   ; set load filename on screen $047E
 +
 +; Load file to compress
 +093D   A9 08      LDA #$08
 +093F   85 B8      STA $B8
 +0941   85 BA      STA $BA
 +0943   A2 01      LDX #$01
 +0945   0A         ASL   ; change A to #$10
 +0946   86 FB      STX $FB
 +0948   85 FC      STA $FC   ; start to load file at $1001
 +094A   A9 60      LDA #$60
 +094C   85 B9      STA $B9
 +094E   20 D5 F3   JSR $F3D5
 +0951   A5 BA      LDA $BA
 +0953   20 09 ED   JSR $ED09
 +0956   A5 B9      LDA $B9
 +0958   20 C7 ED   JSR $EDC7
 +095B   20 13 EE   JSR $EE13
 +095E   20 13 EE   JSR $EE13   ; ignore start address of file
 +0961   20 13 EE   JSR $EE13
 +0964   78         SEI
 +0965   A0 00      LDY #$00
 +0967   E6 01      INC $01
 +0969   91 FB      STA ($FB),Y
 +096B   C6 01      DEC $01
 +096D   8D 20 D0   STA $D020   ; change border colour
 +0970   E6 FB      INC $FB
 +0972   D0 04      BNE $0978
 +0974   E6 FC      INC $FC
 +0976   F0 B2      BEQ $092A
 +0978   24 90      BIT $90
 +097A   50 E5      BVC $0961
 +097C   20 EF ED   JSR $EDEF
 +097F   20 42 F6   JSR $F642
 +
 +; start compression of file
 +0982   78         SEI
 +0983   A9 00      LDA #$00
 +0985   85 C6      STA $C6   ; clear keyboard
 +0987   8D 11 D0   STA $D011   ; blank screen
 +098A   EE 30 D0   INC $D030   ; 2MHz mode on (if c128)
 +098D   85 01      STA $01   ; switch out roms
 +098F   20 63 0B   JSR $0B63   ; move whole file to the end of memory
 +0992   20 B8 0C   JSR $0CB8   ; do compression
 +0995   A9 37      LDA #$37
 +0997   85 01      STA $01   ; switch on roms
 +0999   A9 FC      LDA #$FC
 +099B   8D 30 D0   STA $D030   ; 2MHz mode off
 +099E   A9 1B      LDA #$1B
 +09A0   8D 11 D0   STA $D011   ; unblank screen
 +09A3   20 30 0B   JSR $0B30   ; Display text below on screen
 +
 +; OLD END=$
 +09A6   .BY $0D,$20,$6F,$4C,$44,$20,$65,$4E
 +09AE   .BY $44,$3D,$24,$00
 +
 +;
 +09B2   A5 FC      LDA $FC
 +09B4   E9 07      SBC #$07
 +09B6   AA         TAX
 +09B7   A5 FB      LDA $FB
 +09B9   20 14 0B   JSR $0B14   ; Display 4 character hex number
 +09BC   20 30 0B   JSR $0B30   ; Display text below on screen
 +
 +; NEW END=$
 +09BF   .BY $91,$20,$6E,$45,$57,$20,$65,$4E
 +09C7   .BY $44,$3D,$24,$00
 +
 +;
 +09CB   A5 AF      LDA $AF
 +09CD   E9 05      SBC #$05
 +09CF   AA         TAX
 +09D0   A5 AE      LDA $AE
 +09D2   20 14 0B   JSR $0B14   ; Display 4 character hex number
 +09D5   20 30 0B   JSR $0B30   ; Display text below on screen
 +
 +; 1-SAVE 2-RUN 3-NEW FILE 4-RESET
 +09D8   .BY $0D,$31,$3E,$73,$41,$56,$45,$20
 +09E0   .BY $32,$3E,$72,$55,$4E,$20,$33,$3E
 +09E8   .BY $6E,$45,$57,$20,$66,$49,$4C,$45
 +09F0   .BY $20,$34,$3E,$72,$65,$73,$65,$74
 +09F8   .BY $00
 +
 +; Check for 1234 key option
 +09F9   A9 00      LDA #$00
 +09FB   85 CC      STA $CC   ; cursor on
 +09FD   A9 06      LDA #$06
 +09FF   8D 20 D0   STA $D020   ; Blue border
 +0A02   20 E4 FF   JSR $FFE4
 +0A05   AA         TAX
 +0A06   20 E3 0A   JSR $0AE3   ; Get character under cursor
 +0A09   E6 CC      INC $CC   ; cursor off
 +0A0B   E0 31      CPX #$31   ; option 1
 +0A0D   F0 36      BEQ $0A45   ; Save file
 +0A0F   E0 32      CPX #$32   ; option 2
 +0A11   F0 0B      BEQ $0A1E   ; Run file
 +0A13   E0 33      CPX #$33   ; option 3
 +0A15   F0 2B      BEQ $0A42   ; New file
 +0A17   E0 34      CPX #$34   ; option 4
 +0A19   D0 DE      BNE $09F9
 +0A1B   4C E2 FC   JMP $FCE2   ; Reset
 +
 +; Run newly compressed file
 +0A1E   78         SEI
 +0A1F   A0 16      LDY #$16   ; move code into place
 +0A21   B9 2E 0A   LDA $0A2E,Y
 +0A24   99 FF 00   STA $00FF,Y
 +0A27   88         DEY
 +0A28   D0 F7      BNE $0A21
 +0A2A   E6 01      INC $01
 +0A2C   4C 00 01   JMP $0100
 +
 +; Continuation of running newly compressed file code
 +; to be run from $0100
 +; move compressed file from $0E00-$FFFF to $0800-$F9FF and run it
 +0A2F/0100   B9 00 0E   LDA $0E00,Y
 +0A32/0103   99 00 08   STA $0800,Y
 +0A35/0106   C8         INY
 +0A36/0107   D0 F7      BNE $0A2F/$0100
 +0A38/0109   EE 05 01   INC $0105
 +0A3B/010C   EE 02 01   INC $0102
 +0A3E/010F   D0 EF      BNE $0A2F/$0100
 +0A40/0111   C6 01      DEC $01
 +0A42/0113   4C 12 08   JMP $0812
 +
 +; Save compressed file
 +0A45   A9 40      LDA #$40   ; zero char
 +0A47   8D CC 04   STA $04CC  ; put on screen
 +0A4A   A5 8E      LDA $8E   ; Filename length
 +0A4C   A2 CC      LDX #$CC
 +0A4E   A0 04      LDY #$04
 +0A50   20 BD FF   JSR $FFBD   ; Set save filename on screen $04CC
 +0A53   E6 CC      INC $CC
 +0A55   A9 61      LDA #$61
 +0A57   85 B9      STA $B9
 +0A59   20 D5 F3   JSR $F3D5
 +0A5C   A5 BA      LDA $BA
 +0A5E   20 0C ED   JSR $ED0C
 +0A61   A5 B9      LDA $B9
 +0A63   20 B9 ED   JSR $EDB9
 +0A66   A9 01      LDA #$01
 +0A68   85 8B      STA $8B
 +0A6A   20 DD ED   JSR $EDDD
 +0A6D   A9 0E      LDA #$0E   ; Save from $0E01
 +0A6F   85 8C      STA $8C
 +0A71   A9 08      LDA #$08   ; Save to reload at $0801
 +0A73   20 DD ED   JSR $EDDD
 +0A76   78         SEI
 +0A77   A0 00      LDY #$00
 +0A79   E6 01      INC $01
 +0A7B   B1 8B      LDA ($8B),Y
 +0A7D   C6 01      DEC $01
 +0A7F   20 DD ED   JSR $EDDD
 +0A82   8D 20 D0   STA $D020   ; change border
 +0A85   E6 8B      INC $8B
 +0A87   D0 02      BNE $0A8B
 +0A89   E6 8C      INC $8C
 +0A8B   A5 8B      LDA $8B
 +0A8D   C5 AE      CMP $AE
 +0A8F   A5 8C      LDA $8C
 +0A91   E5 AF      SBC $AF
 +0A93   90 E1      BCC $0A76
 +0A95   20 FE ED   JSR $EDFE
 +0A98   24 B9      BIT $B9
 +0A9A   30 11      BMI $0AAD
 +0A9C   A5 BA      LDA $BA
 +0A9E   20 0C ED   JSR $ED0C
 +0AA1   A5 B9      LDA $B9
 +0AA3   29 EF      AND #$EF
 +0AA5   09 E0      ORA #$E0
 +0AA7   20 B9 ED   JSR $EDB9
 +0AAA   20 FE ED   JSR $EDFE
 +0AAD   58         CLI
 +0AAE   4C F9 09   JMP $09F9   ; Check for 1234 key option
 +
 +; Input filename
 +0AB1   A2 00      LDX #$00
 +0AB3   86 C6      STX $C6   ; clear buffer
 +0AB5   86 CC      STX $CC   ; cursor on
 +0AB7   86 8D      STX $8D
 +0AB9   20 E4 FF   JSR $FFE4
 +0ABC   C9 03      CMP #$03   ; RUN STOP key
 +0ABE   F0 82      BEQ $0A42   ; If so then restart
 +0AC0   A6 8D      LDX $8D
 +0AC2   F0 08      BEQ $0ACC   ; branch if X = 0
 +0AC4   C9 14      CMP #$14   ; Delete key
 +0AC6   F0 18      BEQ $0AE0
 +0AC8   C9 0D      CMP #$0D   ; Return key
 +0ACA   F0 17      BEQ $0AE3   ; If so then End input
 +0ACC   29 7F      AND #$7F   ; Remove high byte
 +0ACE   C9 20      CMP #$20   ; ignore spaces
 +0AD0   90 E7      BCC $0AB9
 +0AD2   E0 10      CPX #$10   ; upto 16 characters
 +0AD4   F0 E3      BEQ $0AB9
 +0AD6   E8         INX
 +0AD7   0A         ASL
 +0AD8   C9 82      CMP #$82
 +0ADA   6A         ROR
 +0ADB   20 D2 FF   JSR $FFD2   ; display character
 +0ADE   90 D7      BCC $0AB7
 +0AE0   CA         DEX   ; reduce filename length
 +0AE1   10 F8      BPL $0ADB   ; branch back (always)
 +
 +; Get character under cursor
 +0AE3   A4 D3      LDY $D3   ; Cursor column number
 +0AE5   B1 D1      LDA ($D1),  ; Get value of character on screen
 +0AE7   30 FC      BMI $0AE5   ; Wait until cursor off
 +0AE9   60         RTS     ; continue
 +
 +; Input two character hex number
 +0AEA   A9 00      LDA #$00
 +0AEC   85 C6      STA $C6
 +0AEE   20 F5 0A   JSR $0AF5   ; do 1st character
 +0AF1   0A         ASL
 +0AF2   0A         ASL
 +0AF3   0A         ASL
 +0AF4   0A         ASL   ; shift 1st and do 2nd
 +0AF5   85 8B      STA $8B
 +0AF7   20 E4 FF   JSR $FFE4
 +0AFA   C9 03      CMP #$03   ; RUN STOP key
 +0AFC   F0 C0      BEQ $0ABE   ; If so then restart
 +0AFE   AA         TAX
 +0AFF   E9 30      SBC #$30
 +0B01   C9 0A      CMP #$0A
 +0B03   90 06      BCC $0B0B   ; test for number
 +0B05   E9 07      SBC #$07
 +0B07   C9 10      CMP #$10
 +0B09   B0 EC      BCS $0AF7   ; test for letter
 +0B0B   A8         TAY
 +0B0C   8A         TXA
 +0B0D   20 D2 FF   JSR $FFD2   ; output character
 +0B10   98         TYA
 +0B11   05 8B      ORA $8B
 +0B13   60         RTS
 +
 +; Display 4 character hex number in AX
 +; (A very elegant piece of code in my opinion)
 +0B14   48         PHA
 +0B15   8A         TXA
 +0B16   20 1A 0B   JSR $0B1A   ; display 2 character hex number in A
 +0B19   68         PLA
 +0B1A   48         PHA
 +0B1B   4A         LSR
 +0B1C   4A         LSR
 +0B1D   4A         LSR
 +0B1E   4A         LSR
 +0B1F   20 25 0B   JSR $0B25   ; display 1 character hex number
 +0B22   68         PLA
 +0B23   29 0F      AND #$0F
 +0B25   C9 0A      CMP #$0A
 +0B27   90 02      BCC $0B2B   ; if number then branch
 +0B29   69 06      ADC #$06
 +0B2B   69 30      ADC #$30
 +0B2D   4C D2 FF   JMP $FFD2   ; output character
 +
 +; Display text just after JSR on screen
 +0B30   20 E3 0A   JSR $0AE3   ; Get character under cursor
 +0B33   68         PLA    ; get low memory loc after JSR
 +0B34   A8         TAY    ; store low in Y
 +0B35   68         PLA    ; get high memory loc after JSR
 +0B36   85 8C      STA $8C   ; store high byte
 +0B38   A2 01      LDX #$01
 +0B3A   8E 86 02   STX $0286   ; white characters
 +0B3D   CA         DEX
 +0B3E   86 8B      STX $8B   ; store #$00
 +0B40   A9 0D      LDA #$0D   ; Return char
 +0B42   20 D2 FF   JSR $FFD2   ; Output Return
 +0B45   90 09      BCC $0B50   ; Jump to $0B50
 +0B47   C8         INY    ; incrememnt pointer
 +0B48   D0 02      BNE $0B4C
 +0B4A   E6 8C      INC $8C   ; and high byte in necess
 +0B4C   B1 8B      LDA ($8B),  ; read next memory loc in A
 +0B4E   F0 05      BEQ $0B55   ; Is A = #$00, if yes branch
 +0B50   20 D2 FF   JSR $FFD2   ; Output char in A
 +0B53   90 F2      BCC $0B47   ; Jump to $0B47
 +0B55   A9 03      LDA #$03
 +0B57   8D 86 02   STA $0286   ; cyan characters
 +0B5A   8D 87 02   STA $0287   ; and cursor
 +0B5D   A5 8C      LDA $8C
 +0B5F   48         PHA   ; push return address after
 +0B60   98         TYA   ; text back onto the stack
 +0B61   48         PHA
 +0B62   60         RTS
 +
 +; Move whole file to the end of memory
 +0B63   A0 00      LDY #$00
 +0B65   98         TYA
 +0B66   38         SEC
 +0B67   E5 FB      SBC $FB
 +0B69   08         PHP
 +0B6A   18         CLC
 +0B6B   69 01      ADC #$01
 +0B6D   85 FD      STA $FD
 +0B6F   98         TYA
 +0B70   69 10      ADC #$10
 +0B72   28         PLP
 +0B73   E5 FC      SBC $FC
 +0B75   85 FE      STA $FE
 +0B77   A5 FB      LDA $FB
 +0B79   A6 FC      LDX $FC
 +0B7B   85 02      STA $02
 +0B7D   CA         DEX
 +0B7E   86 03      STX $03
 +0B80   CE 87 0B   DEC $0B87
 +0B83   B1 02      LDA ($02),Y
 +0B85   99 00 00   STA $0000,Y
 +0B88   C8         INY
 +0B89   D0 F8      BNE $0B83
 +0B8B   E0 10      CPX #$10
 +0B8D   B0 EE      BCS $0B7D
 +0B8F   8C 87 0B   STY $0B87
 +0B92   A5 FC      LDA $FC
 +0B94   E9 07      SBC #$07
 +0B96   A6 FB      LDX $FB
 +0B98   8E 28 0E   STX $0E28
 +0B9B   8D 2A 0E   STA $0E2A
 +0B9E   D0 02      BNE $0BA2
 +0BA0   E9 01      SBC #$01
 +0BA2   CA         DEX
 +0BA3   8E 3D 0E   STX $0E3D
 +0BA6   8D 3E 0E   STA $0E3E
 +0BA9   60         RTS
 +
 +; Do compression part 2 (main part)
 +; Relocated to $0002-$00FF before being used
 +0BAA/0002   85 28      STA $28
 +0BAC/0004   86 74      STX $74
 +0BAE/0006   8A         TXA
 +0BAF/0007   E5 71      SBC $71
 +0BB1/0009   AA         TAX
 +0BB2/000A   A5 75      LDA $75
 +0BB4/000C   E5 72      SBC $72
 +0BB6/000E   F0 02      BEQ $0BBA/$0012
 +0BB8/0010   A2 FF      LDX #$FF
 +0BBA/0012   A0 00      LDY #$00
 +0BBC/0014   C8         INY
 +0BBD/0015   CA         DEX
 +0BBE/0016   F0 06      BEQ $0BC6/$001E
 +0BC0/0018   B1 71      LDA ($71),Y
 +0BC2/001A   D1 74      CMP ($74),Y
 +0BC4/001C   F0 F6      BEQ $0BBC/$0014
 +0BC6/001E   88         DEY
 +0BC7/001F   C0 00      CPY #$00
 +0BC9/0021   90 02      BCC $0BCD/$0025
 +0BCB/0023   D0 0A      BNE $0BD7/$002F
 +0BCD/0025   A6 74      LDX $74
 +0BCF/0027   A9 00      LDA #$00
 +0BD1/0029   A0 00      LDY #$00
 +0BD3/002B   84 74      STY $74
 +0BD5/002D   F0 49      BEQ $0C20/$0078
 +0BD7/002F   A6 75      LDX $75
 +0BD9/0031   E8         INX
 +0BDA/0032   D0 0F      BNE $0BEB/$0043
 +0BDC/0034   98         TYA
 +0BDD/0035   65 74      ADC $74
 +0BDF/0037   90 0A      BCC $0BEB/$0043
 +0BE1/0039   85 3D      STA $3D
 +0BE3/003B   98         TYA
 +0BE4/003C   E9 FF      SBC #$FF
 +0BE6/003E   C5 20      CMP $20
 +0BE8/0040   90 E3      BCC $0BCD/$0025
 +0BEA/0042   A8         TAY
 +0BEB/0043   84 20      STY $20
 +0BED/0045   A6 74      LDX $74
 +0BEF/0047   A5 75      LDA $75
 +0BF1/0049   86 89      STX $89
 +0BF3/004B   85 93      STA $93
 +0BF5/004D   C0 FE      CPY #$FE
 +0BF7/004F   90 D6      BCC $0BCF/$0027
 +0BF9/0051   B0 35      BCS $0C30/$0088
 +;
 +0BFB/0053   A6 71      LDX $71
 +0BFD/0055   A4 72      LDY $72
 +0BFF/0057   E8         INX
 +0C00/0058   D0 03      BNE $0C05/$005D
 +0C02/005A   C8         INY
 +0C03/005B   F0 63      BEQ $0C68/$00C0
 +0C05/005D   84 75      STY $75
 +0C07/005F   A9 00      LDA #$00
 +0C09/0061   C6 01      DEC $01
 +0C0B/0063   EE 20 D0   INC $D020   ; change border
 +0C0E/0066   85 01      STA $01
 +0C10/0068   85 20      STA $20
 +0C12/006A   85 74      STA $74
 +0C14/006C   A9 08      LDA #$08   ; STEP bit position
 +0C16/006D   85 DE      STA $DE
 +0C18/0070   AD 00 FF   LDA $FF00
 +0C1B/0073   DD 00 FF   CMP $FF00,X
 +0C1E/0076   F0 8A      BEQ $0BAA/$0002
 +0C20/0078   E8         INX
 +0C21/0079   D0 F8      BNE $0C1B/$0073
 +0C23/007B   E6 75      INC $75
 +0C25/007D   F0 04      BEQ $0C2B/$0083
 +0C27/007F   C6 DE      DEC $DE
 +0C29/0081   D0 F0      BNE $0C1B/$0073
 +0C2B/0083   A4 20      LDY $20
 +0C2D/0085   F0 3B      BEQ $0C6A/$00C2
 +0C2F/0087   38         SEC
 +0C30/0088   A9 00      LDA #$00
 +0C32/008A   E5 20      SBC $20
 +0C34/008C   08         PHP
 +0C35/008D   18         CLC
 +0C36/008E   E5 71      SBC $71
 +0C38/0090   85 DA      STA $DA
 +0C3A/0092   A9 00      LDA #$00
 +0C3C/0094   E5 72      SBC $72
 +0C3E/0096   28         PLP
 +0C3F/0097   E9 00      SBC #$00
 +0C41/0099   85 DB      STA $DB
 +0C43/009B   C0 02      CPY #$02
 +0C45/009D   B0 08      BCS $0C4F/$00A7
 +0C47/009F   AA         TAX
 +0C48/00A0   D0 1D      BNE $0C67/$00BF
 +0C4A/00A2   20 5E 0D   JSR $0D5E
 +0C4D/00A5   D0 0A      BNE $0C59/$00B1
 +0C4F/00A7   D0 05      BNE $0C56/$00AE
 +0C51/00A9   20 A1 0D   JSR $0DA1
 +0C54/00AC   F0 03      BEQ $0C59/$00B1
 +0C56/00AE   20 C3 0D   JSR $0DC3
 +0C59/00B1   A5 20      LDA $20
 +0C5B/00B3   38         SEC
 +0C5C/00B4   65 71      ADC $71
 +0C5E/00B6   85 71      STA $71
 +0C60/00B8   90 99      BCC $0BFB/$0053
 +0C62/00BA   E6 72      INC $72
 +0C64/00BC   D0 95      BNE $0BFB/$0053
 +0C66/00BE   60         RTS
 +;
 +0C67/00BF   88         DEY
 +0C68/00C0   B1 71      LDA ($71),Y
 +0C6A/00C2   8D FF FF   STA $FFFF
 +0C6D/00C5   E6 C3      INC $C3
 +0C6F/00C7   D0 02      BNE $0C73/$00CB
 +0C71/00C9   E6 C4      INC $C4
 +0C73/00CB   E6 CE      INC $CE
 +0C75/00CD   A2 00      LDX #$00
 +0C77/00CF   E8         INX
 +0C78/00D0   D0 03      BNE $0C7D/$00D5
 +0C7A/00D2   20 2A 0D   JSR $0D2A
 +0C7D/00D5   98         TYA
 +0C7E/00D6   F0 DB      BEQ $0C5B/$00B3
 +0C80/00D8   08         PHP
 +
 +; Filler
 +0C81/00D9   .BY $00,$00,$00,$00,$00,$00,$00,$00
 +0C89/00E1   .BY $00,$00,$00,$00,$00,$00,$00,$00
 +0C91/00E9   .BY $00,$00,$00,$00,$00,$00,$00,$00
 +0C99/00F1   .BY $00,$00,$00,$00,$00,$00,$00,$00
 +0CA1/00F9   .BY $00,$00,$00,$00,$00,$00,$00
 +
 +; Swap $0002-$00FF and $0BAA-$0CA7
 +0CA8   A2 02      LDX #$02
 +0CAA   B5 00      LDA $00,X
 +0CAC   BC A8 0B   LDY $0BA8,X
 +0CAF   94 00      STY $00,X
 +0CB1   9D A8 0B   STA $0BA8,X
 +0CB4   E8         INX
 +0CB5   D0 F3      BNE $0CAA
 +0CB7   60         RTS
 +
 +; Do compression part 1
 +0CB8   A5 FD      LDA $FD
 +0CBA   A6 FE      LDX $FE
 +0CBC   8D 19 0C   STA $0C19
 +0CBF   8E 1A 0C   STX $0C1A
 +0CC2   A9 2C      LDA #$2C
 +0CC4   A2 0F      LDX #$0F   ; position to store compressed code
 +0CC6   8D 6B 0C   STA $0C6B
 +0CC9   8E 6C 0C   STX $0C6C
 +0CCC   20 A8 0C   JSR $0CA8   ; Swap $0002-$00FF and $0BAA-$0CA7
 +0CCF   20 53 00   JSR $0053
 +0CD2   20 2C 0D   JSR $0D2C
 +0CD5   A5 D9      LDA $D9
 +0CD7   8D 39 0E   STA $0E39   ; store value in decompression routine
 +0CDA   A9 08      LDA #$08
 +0CDC   38         SEC
 +0CDD   E5 D8      SBC $D8
 +0CDF   D0 0A      BNE $0CEB
 +0CE1   A5 C3      LDA $C3
 +0CE3   D0 02      BNE $0CE7
 +0CE5   C6 C4      DEC $C4
 +0CE7   C6 C3      DEC $C3
 +0CE9   A9 08      LDA #$08
 +0CEB   8D 3A 0E   STA $0E3A   ; store value in decompression routine
 +0CEE   A5 C3      LDA $C3
 +0CF0   48         PHA
 +0CF1   E9 45      SBC #$45
 +0CF3   8D 3B 0E   STA $0E3B   ; store value in decompression routine
 +0CF6   A5 C4      LDA $C4
 +0CF8   48         PHA
 +0CF9   E9 07      SBC #$07
 +0CFB   8D 3C 0E   STA $0E3C   ; store value in decompression routine
 +0CFE   A5 C4      LDA $C4
 +0D00   E9 0D      SBC #$0D
 +0D02   8D 34 0E   STA $0E34
 +0D05   20 A8 0C   JSR $0CA8    ; Swap $0002-$00FF and $0BAA-$0CA7
 +0D08   68         PLA
 +0D09   85 AF      STA $AF
 +0D0B   68         PLA
 +0D0C   85 AE      STA $AE
 +0D0E   60         RTS
 +
 +; More decompression code
 +0D0F   20 2C 0D   JSR $0D2C
 +0D12   A5 DD      LDA $DD
 +0D14   F0 F8      BEQ $0D0E
 +0D16   A2 04      LDX #$04
 +0D18   20 82 0D   JSR $0D82
 +0D1B   86 DD      STX $DD
 +0D1D   A9 FD      LDA #$FD
 +0D1F   A2 08      LDX #$08
 +0D21   20 82 0D   JSR $0D82
 +0D24   A9 07      LDA #$07
 +0D26   A2 03      LDX #$03
 +0D28   D0 58      BNE $0D82
 +0D2A   E6 DD      INC $DD
 +0D2C   A5 CE      LDA $CE
 +0D2E   C9 06      CMP #$06
 +0D30   B0 08      BCS $0D3A
 +0D32   A2 00      LDX #$00
 +0D34   86 CE      STX $CE
 +0D36   A2 03      LDX #$03
 +0D38   D0 48      BNE $0D82
 +0D3A   E9 06      SBC #$06
 +0D3C   C9 10      CMP #$10
 +0D3E   B0 0F      BCS $0D4F
 +0D40   A2 04      LDX #$04
 +0D42   20 82 0D   JSR $0D82
 +0D45   86 CE      STX $CE
 +0D47   18         CLC
 +0D48   20 69 0D   JSR $0D69
 +0D4B   A9 03      LDA #$03
 +0D4D   D0 31      BNE $0D80
 +0D4F   A2 08      LDX #$08
 +0D51   20 82 0D   JSR $0D82
 +0D54   86 CE      STX $CE
 +0D56   38         SEC
 +0D57   20 69 0D   JSR $0D69
 +0D5A   A9 03      LDA #$03
 +0D5C   D0 22      BNE $0D80
 +0D5E   20 0F 0D   JSR $0D0F
 +0D61   A5 DA      LDA $DA
 +0D63   A2 08      LDX #$08
 +0D65   20 82 0D   JSR $0D82
 +0D68   38         SEC
 +0D69   66 D9      ROR $D9
 +0D6B   C6 D8      DEC $D8
 +0D6D   D0 10      BNE $0D7F
 +0D6F   A5 D9      LDA $D9
 +0D71   A0 00      LDY #$00
 +0D73   91 C3      STA ($C3),Y
 +0D75   A9 08      LDA #$08
 +0D77   85 D8      STA $D8
 +0D79   E6 C3      INC $C3
 +0D7B   D0 02      BNE $0D7F
 +0D7D   E6 C4      INC $C4
 +0D7F   60         RTS
 +
 +; More decompression code
 +0D80   A2 02      LDX #$02
 +0D82   6A         ROR
 +0D83   66 D9      ROR $D9
 +0D85   C6 D8      DEC $D8
 +0D87   D0 14      BNE $0D9D
 +0D89   85 DC      STA $DC
 +0D8B   A5 D9      LDA $D9
 +0D8D   A0 00      LDY #$00
 +0D8F   91 C3      STA ($C3),Y
 +0D91   A9 08      LDA #$08
 +0D93   85 D8      STA $D8
 +0D95   A5 DC      LDA $DC
 +0D97   E6 C3      INC $C3
 +0D99   D0 02      BNE $0D9D
 +0D9B   E6 C4      INC $C4
 +0D9D   CA         DEX
 +0D9E   D0 E2      BNE $0D82
 +0DA0   60         RTS
 +
 +; More decompression code
 +0DA1   20 0F 0D   JSR $0D0F
 +0DA4   A5 DA      LDA $DA
 +0DA6   A2 08      LDX #$08
 +0DA8   A4 DB      LDY $DB
 +0DAA   D0 06      BNE $0DB2
 +0DAC   20 82 0D   JSR $0D82
 +0DAF   18         CLC
 +0DB0   90 0B      BCC $0DBD
 +0DB2   20 82 0D   JSR $0D82
 +0DB5   A5 DB      LDA $DB
 +0DB7   A2 03      LDX #$03   ; STEP value
 +0DB9   20 82 0D   JSR $0D82
 +0DBC   38         SEC
 +0DBD   20 69 0D   JSR $0D69
 +0DC0   8A         TXA
 +0DC1   F0 BD      BEQ $0D80
 +0DC3   20 0F 0D   JSR $0D0F
 +0DC6   A5 DA      LDA $DA
 +0DC8   A2 08      LDX #$08
 +0DCA   A4 DB      LDY $DB
 +0DCC   D0 06      BNE $0DD4
 +0DCE   20 82 0D   JSR $0D82
 +0DD1   18         CLC
 +0DD2   90 0B      BCC $0DDF
 +0DD4   20 82 0D   JSR $0D82
 +0DD7   A5 DB      LDA $DB
 +0DD9   A2 03      LDX #$03   ; STEP value
 +0DDB   20 82 0D   JSR $0D82
 +0DDE   38         SEC
 +0DDF   20 69 0D   JSR $0D69
 +0DE2   A5 20      LDA $20
 +0DE4   38         SEC
 +0DE5   E9 03      SBC #$03
 +0DE7   C9 10      CMP #$10
 +0DE9   B0 08      BCS $0DF3
 +0DEB   A2 04      LDX #$04
 +0DED   20 82 0D   JSR $0D82
 +0DF0   18         CLC
 +0DF1   90 06      BCC $0DF9
 +0DF3   A2 08      LDX #$08
 +0DF5   20 82 0D   JSR $0D82
 +0DF8   38         SEC
 +0DF9   20 69 0D   JSR $0D69
 +0DFC   A9 01      LDA #$01
 +0DFE   D0 80      BNE $0D80
 +
 +;
 +; Extraction code $0E00 - $0F2C
 +; Normally located at $0800 - $092C
 +;
 +
 +; BASIC PRG ( 1991 SYS2061 )
 +0E00/0800   .BY $00,$0A,$08,$C7,$07,$9E,$32,$30
 +0E08/0808   .BY $36,$31,$00,$00,$00
 +
 +0E0D/080D   A9 00      LDA #$00
 +0E0F/080F   20 44 E5   JSR $E544   ; clear screen
 +0E12/0812   78         SEI
 +0E13/0813   A2 FF      LDX #$FF
 +0E15/0815   9A         TXS   ; clear stack
 +0E16/0816   BD 37 08   LDA $0837,X
 +0E19/0819   9D F8 00   STA $00F8,  ; relocate decompression code
 +0E1C/081C   CA         DEX
 +0E1D/081D   D0 F7      BNE $0E16/$0816
 +0E1F/081F   8E 11 D0   STX $D011   ; blank screen
 +0E22/0822   EE 30 D0   INC $D030   ; 2MHz mode on (if c128)
 +0E25/0825   86 01      STX $01
 +0E27/0827   A9 00      LDA #$00   ; replaced by pointer to
 +0E29/0829   A0 00      LDY #$00   ; end of program
 +0E2B/082B   85 2D      STA $2D
 +0E2D/082D   84 2E      STY $2E
 +0E2F/082F   85 AE      STA $AE
 +0E31/0831   84 AF      STY $AF
 +0E33/0833   A0 00      LDY #$00   ; Value is changed
 +0E35/0835   4C 00 01   JMP $0100
 +
 +; Zero page bytes (are changed from zeros)
 +0E38/00F9   .BY $00,$00,$00,$00,$00,$00,$00
 +
 +; Decompression code at $0100
 +0E3F/0100   BD 2C 09   LDA $092C,X
 +0E42/0103   9D E8 07   STA $07E8,X
 +0E45/0106   E8         INX
 +0E46/0107   D0 F7      BNE $0E3F/$0100
 +0E48/0109   EE 02 01   INC $0102
 +0E4B/010C   EE 05 01   INC $0105
 +0E4E/010F   88         DEY
 +0E4F/0110   D0 EE      BNE $0E3F/$0100
 +0E51/0112   A2 02      LDX #$02
 +0E53/0114   20 9D 01   JSR $019D
 +0E56/0117   F0 2C      BEQ $0E84/$0145
 +0E58/0119   C9 06      CMP #$06
 +0E5A/011B   90 12      BCC $0E6E/$012F
 +0E5C/011D   29 01      AND #$01
 +0E5E/011F   A8         TAY
 +0E5F/0120   20 9A 01   JSR $019A
 +0E62/0123   69 06      ADC #$06
 +0E64/0125   90 08      BCC $0E6E/$012F
 +0E66/0127   AA         TAX
 +0E67/0128   20 9D 01   JSR $019D
 +0E6A/012B   85 F9      STA $F9
 +0E6C/012D   10 E3      BPL $0E51/$0112
 +0E6E/012F   85 8B      STA $8B
 +0E70/0131   A5 FC      LDA $FC
 +0E72/0133   38         SEC
 +0E73/0134   E5 8B      SBC $8B
 +0E75/0136   85 FC      STA $FC
 +0E77/0138   85 8C      STA $8C
 +0E79/013A   A5 FD      LDA $FD
 +0E7B/013C   E9 00      SBC #$00
 +0E7D/013E   85 FD      STA $FD
 +0E7F/0140   85 8D      STA $8D
 +0E81/0142   20 86 01   JSR $0186
 +0E84/0145   A6 F9      LDX $F9
 +0E86/0147   F0 04      BEQ $0E8C/$014D
 +0E88/0149   C6 F9      DEC $F9
 +0E8A/014B   10 C5      BPL $0E51/$0112
 +0E8C/014D   20 9D 01   JSR $019D
 +0E8F/0150   F0 09      BEQ $0E9A/$015B
 +0E91/0152   20 9A 01   JSR $019A
 +0E94/0155   A2 02      LDX #$02
 +0E96/0157   86 8B      STX $8B
 +0E98/0159   90 1B      BCC $0EB5/$0176
 +0E9A/015B   E8         INX
 +0E9B/015C   20 9D 01   JSR $019D
 +0E9E/015F   F0 09      BEQ $0EA9/$016A
 +0EA0/0161   E8         INX
 +0EA1/0162   20 9D 01   JSR $019D
 +0EA4/0165   20 9A 01   JSR $019A
 +0EA7/0168   69 01      ADC #$01
 +0EA9/016A   69 03      ADC #$03
 +0EAB/016C   85 8B      STA $8B
 +0EAD/016E   E8         INX
 +0EAE/016F   20 9D 01   JSR $019D
 +0EB1/0172   C8         INY
 +0EB2/0173   20 9A 01   JSR $019A
 +0EB5/0176   65 FE      ADC $FE
 +0EB7/0178   85 8C      STA $8C
 +0EB9/017A   A5 8D      LDA $8D
 +0EBB/017C   65 FF      ADC $FF
 +0EBD/017E   85 8D      STA $8D
 +0EBF/0180   38         SEC
 +0EC0/0181   20 86 01   JSR $0186
 +0EC3/0184   F0 8C      BEQ $0E51/$0112   ; branch always
 +;
 +0EC5/0186   A4 8B      LDY $8B
 +0EC7/0188   A5 FE      LDA $FE
 +0EC9/018A   E5 8B      SBC $8B
 +0ECB/018C   85 FE      STA $FE
 +0ECD/018E   B0 02      BCS $0ED1/$0192
 +0ECF/0190   C6 FF      DEC $FF
 +0ED1/0192   B1 8C      LDA ($8C),Y
 +0ED3/0194   91 FE      STA ($FE),Y
 +0ED5/0196   88         DEY
 +0ED6/0197   D0 F9      BNE $0ED1/$0192
 +0ED8/0199   60         RTS
 +
 +;
 +0ED9/019A   BE EA 01   LDX $01EA,Y
 +0EDC/019D   A9 00      LDA #$00
 +0EDE/019F   85 8D      STA $8D
 +0EE0/01A1   A4 FB      LDY $FB
 +0EE2/01A3   F0 0C      BEQ $0EF0/$01B1
 +0EE4/01A5   06 FA      ASL $FA
 +0EE6/01A7   2A         ROL
 +0EE7/01A8   26 8D      ROL $8D
 +0EE9/01AA   C6 FB      DEC $FB
 +0EEB/01AC   CA         DEX
 +0EEC/01AD   10 F2      BPL $0EE0/$01A1
 +0EEE/01AF   A8         TAY
 +0EEF/01B0   60         RTS
 +
 +;
 +0EF0/01B1   85 8E      STA $8E
 +0EF2/01B3   B1 FC      LDA ($FC),Y
 +0EF4/01B5   85 FA      STA $FA
 +0EF6/01B7   A9 08      LDA #$08
 +0EF8/01B9   85 FB      STA $FB
 +0EFA/01BB   A5 8E      LDA $8E
 +0EFC/01BD   A4 FC      LDY $FC
 +0EFE/01BF   D0 02      BNE $0F02/$01C3
 +0F00/01C1   C6 FD      DEC $FD
 +0F02/01C3   C6 FC      DEC $FC
 +0F04/01C5   C0 E7      CPY #$E7
 +0F06/01C7   D0 DC      BNE $0EE4/$01A5
 +0F08/01C9   A4 FD      LDY $FD
 +0F0A/01CB   C0 07      CPY #$07
 +0F0C/01CD   D0 D6      BNE $0EE4/$01A5
 +0F0E/01CF   A9 33      LDA #$33   ; set value of $01 register
 +0F10/01D1   85 01      STA $01
 +0F12/01D3   CE 30 D0   DEC $D030   ; 2MHz mode off
 +0F15/01D6   A9 1B      LDA #$1B
 +0F17/01D8   8D 11 D0   STA $D011   ; unblank screen
 +0F1A/01DB   58         CLI
 +0F1B/01DC   A9 00      LDA #$00
 +0F1D/01DE   8D 00 08   STA $0800
 +0F20/01E1   20 33 33   JSR $3333   ; JSR to start address of file
 +0F23/01E4   20 8E A6   JSR $A68E
 +0F26/01E7   4C AE A7   JMP $A7AE
 +0F29/01EA  .BY $03
 +0F2A/01EB  .BY $07
 +0F2B/01EC  .BY $0A   ; STEP plus 7
 +0F2C/01ED  .BY $00
 +
 +; The end
 +</code>
 +
  
base/2mhz_time_crunch_v5_disassembled.txt ยท Last modified: 2015-04-17 04:30 (external edit)