diff --git a/diskotape/data/DOT.IMAGE#062000 b/diskotape/data/DOT.IMAGE#062000 new file mode 100644 index 0000000..ed397ec Binary files /dev/null and b/diskotape/data/DOT.IMAGE#062000 differ diff --git a/diskotape/data/DOT.LOADER#060200 b/diskotape/data/DOT.LOADER#060200 new file mode 100644 index 0000000..0859eea --- /dev/null +++ b/diskotape/data/DOT.LOADER#060200 @@ -0,0 +1 @@ +ҠҠǍԠé٠Π \ No newline at end of file diff --git a/diskotape/data/DOT.PGM#065000 b/diskotape/data/DOT.PGM#065000 new file mode 100644 index 0000000..c3ce6e9 Binary files /dev/null and b/diskotape/data/DOT.PGM#065000 differ diff --git a/diskotape/diskotape.s b/diskotape/diskotape.s new file mode 100644 index 0000000..f093b50 --- /dev/null +++ b/diskotape/diskotape.s @@ -0,0 +1,572 @@ +* +* Disk-o-Tape +* (c) 1980, Dann McCreary +* + + TYP BIN + ORG $005100 + MX %11 + +*----------------------------------- + +CSWL = $36 +CSWH = $37 +A1L = $3C +A1H = $3D + +KBD EQU $C000 +KBDSTROBE EQU $C010 +PRBL2 EQU $F94A +HOME EQU $FC58 +WAIT EQU $FCA8 +RDCHAR EQU $FD35 +GETLN EQU $FD6A +CROUT EQU $FD8E +PRBYTE EQU $FDDA +COUT EQU $FDED +WRITE EQU $FECD +READ EQU $FEFD +BELL EQU $FF3A + +L1000 = $1000 +L5000 = $5000 ; Where the VTOC is loaded + +*----------------------------------- + +L5100 JMP L510A + + LDY $8034 + LDA #$02 + BNE L510C + +L510A LDA #$01 ; Read command +L510C PHA + LDX #$14 +L510F LDA IOB_DFT,X + STA IOB,X + DEX + BNE L510F + PLA + STA IOB_COMMAND + JSR L5259 + JSR HOME + LDA IOB_COMMAND + LSR + BNE L5131 + JSR L54E1 + JSR CROUT + JMP L514D + +L5131 LDY #$0A + JSR PRINTSTRING + JSR CROUT + LDY #$25 +L513B LDA #$FF + JSR WAIT + DEY + BNE L513B + LDY #$1A + JSR PRINTSTRING + LDY #$1E + JSR PRINTSTRING +L514D LDY #$1C + JSR PRINTSTRING + JSR L52AA + LDA #$01 + STA L55FB + JSR CROUT + LDY #$0C + JSR PRINTSTRING +L5162 JSR L51D8 + JSR L51A5 + LDA IOB_TRACK + BMI L5175 + CLC + ADC IOB_SECTOR + CMP #$00 + BNE L5162 +L5175 LDA IOB_COMMAND + LSR + BNE L517E + JMP L554E + +L517E JSR CROUT + LDY #$08 +L5183 JSR CROUT + JSR PRINTSTRING + JSR L518F + JMP $03D0 + +L518F BIT KBDSTROBE +L5192 LDY #$07 +L5194 LDA #$FF + JSR WAIT + DEY + BNE L5194 + JSR BELL + LDA KBD + BPL L5192 + RTS + +L51A5 LDA IOB_COMMAND + LSR + BNE L51DE +L51AB LDY #$00 +L51AD LDX #$03 +L51AF LDA L52FC,Y + STA A1L,X + INY + DEX + BPL L51AF + LDA IOB_COMMAND + AND #$01 + BNE L51D5 + JSR L5250 + JSR READ + PHP + JSR L5259 + PLP + BEQ L51D4 + JSR CROUT + LDY #$18 + JMP L52A2 +L51D4 RTS +L51D5 JMP WRITE + +L51D8 LDA IOB_COMMAND + LSR + BNE L51AB +L51DE LDA #>L1000 + STA IOB_BUFFER+1 + STA A1H + LDA #L5262 + STA CSWH + RTS + +L5259 LDA #$F0 + STA CSWL + LDA #$FD + STA CSWH + RTS + +L5262 CMP #$87 + BEQ L526A + PLA + PLA + LDA #$FF +L526A RTS + +*----------------------------------- + +PRINTSTRING LDA L5329,Y ; PRINT STRING + STA $01 + LDA L532A,Y + STA $00 + LDY #$FF +L5277 INY + LDA ($00),Y + ORA #$80 + JSR COUT + LDA ($00),Y + BMI L5277 + RTS + +*----------------------------------- + +GO_RWTS LDA #>IOB + LDY #L53C3 ; 0 DISK-O-TAPE/PASCAL +L532A DB L543C ; 1 PLEASE INSERT DISK TO BE COPIED + DB L5418 ; 2 COPYRIGHT + DB L5498 ; 3 PLEASE REWIND TAPE... + DB L536A ; 4 COPY DONE + DB L5374 ; 5 COPY TAPE -> DISK + DB L5386 ; 6 TK/SC + DB L538C ; 7 DISK WRITE PROTECTED + DB L53A1 ; 8 DISK READ ERROR + DB L53B1 ; 9 DISK DRIVE ERROR + DB L545C ; A COPY DISK -> TAPE + DB L534F ; B COPY ABORT + DB L535A ; C TAPE READ ERROR + DB L53D6 ; D DISK NAME + DB L53DF ; E " " + DB L53C2 ; F : + DB L546E ; 10 ERROR DURING + DB L547B ; 11 TAPE VERIFY + DB L5488 ; 12 VERIFY COMPLETE + DB >L5488 + +L534F ASC "COPY ABORT"0D +L535A ASC "TAPE READ ERROR"0D +L536A ASC "COPY DONE"0D +L5374 ASC "COPY TAPE -> DISK"0D +L5386 ASC "TK/SC"0D +L538C ASC "DISK WRITE PROTECTED"0D +L53A1 ASC "DISK READ ERROR"0D +L53B1 ASC "DISK DRIVE ERROR"0D +L53C2 ASC ':' +L53C3 ASC "DISK-O-TAPE/PASCAL"0D +L53D6 ASC "DISK NAM" + ASC 'E' +L53DF ASC " " +L53E0 ASC "SPACE RESERVED FOR DISK NAME "0D +L53FE ASC "200.240R 5000.5460R 5103G"8D +L5418 ASC "COPYRIGHT (C) 1980 BY DANN MCCREARY"0D +L543C ASC "PLEASE INSERT DISK TO BE COPIED"0D +L545C ASC "COPY DISK -> TAPE"0D +L546E ASC "ERROR DURING " +L547B ASC "TAPE VERIFY"8D0D +L5488 ASC "VERIFY COMPLETE"0D +L5498 ASC "PLEASE REWIND TAPE, START"8D + ASC "RECORDER AND PRESS RETURN"0D + +*----------------------------------- + +IOB DB $01 ; 0 IOB type + DB $60 ; 1 Slot number * 16 + DB $01 ; 2 Disk drive + DB $00 ; 3 Expected volume number +IOB_TRACK DB $00 ; 4 Track +IOB_SECTOR DB $00 ; 5 Sector + DA L54DD +IOB_BUFFER DA $1000 ; 8 Buffer + DB $00 + DB $00 +IOB_COMMAND DB $00 ; Command +IOB_ERRCODE DB $00 ; Error code + DB $00 + DB $60 + DB $01 +L54DD DB $00 ; DCT + DB $01 + DB $EF + DB $D8 + +*----------------------------------- + + MX %11 + +L54E1 LDY #$00 + JSR PRINTSTRING + LDY #$04 + JSR PRINTSTRING + JSR CROUT + LDY #$02 + JSR PRINTSTRING + JSR CROUT + LDY #$1A + JSR PRINTSTRING + LDA #$BF + STA |$0033 + JSR GETLN + CPX #$1D + BCC L5509 + LDX #$1D +L5509 LDA #$0D + STA L53E0,X +L550E LDA $0200,X + STA L53DF,X + DEX + BPL L550E + JSR CROUT + LDY #$06 + JSR PRINTSTRING + JSR RDCHAR + JSR CROUT + LDY #$14 + JSR PRINTSTRING + LDY #$10 + JSR L51AD + JSR L5537 ; read VTOC + LDY #$08 + JMP L51AD + +*---------- Read (write?) VTOC + +L5537 LDA #$00 + STA IOB_SECTOR + LDA #$11 + STA IOB_TRACK + LDA #>L5000 + STA IOB_BUFFER+1 + LDA #L55ED + STA CSWH + RTS + +L55ED CMP #$87 + BEQ L55F5 + PLA + PLA + PLA + PLA +L55F5 CLC + RTS + +L55F7 DB $00 +L55F8 DB $00 +L55F9 DB $00 +L55FA DB $00 +L55FB DB $00 + DB $00 + DB $00 +L55FE DB $00 + DB $51 +