From a7b5376ba61adb07c14602b2208737a2a489d591 Mon Sep 17 00:00:00 2001 From: Antoine Vignau <34219772+antoinevignau@users.noreply.github.com> Date: Wed, 13 Mar 2024 04:41:35 +0100 Subject: [PATCH] Disk-O-Tape --- diskotape/data/DOT.IMAGE#062000 | Bin 0 -> 8192 bytes diskotape/data/DOT.LOADER#060200 | 1 + diskotape/data/DOT.PGM#065000 | Bin 0 -> 1121 bytes diskotape/diskotape.s | 572 +++++++++++++++++++++++++++++++ 4 files changed, 573 insertions(+) create mode 100644 diskotape/data/DOT.IMAGE#062000 create mode 100644 diskotape/data/DOT.LOADER#060200 create mode 100644 diskotape/data/DOT.PGM#065000 create mode 100644 diskotape/diskotape.s diff --git a/diskotape/data/DOT.IMAGE#062000 b/diskotape/data/DOT.IMAGE#062000 new file mode 100644 index 0000000000000000000000000000000000000000..ed397eccca6fe4178b5c0cb47a8894f4fd0aa296 GIT binary patch literal 8192 zcmeGfTWs4@^u|rsv`ZjaqOO`4ve=Lqnna|Ht(rRE2WgrDt7BUN#D~RK8GL7LQ-H4W!FOIJkp0QILz zuH@Wv&&%hWdmau#_t*BV_u)o?oD7Bb^-GQ7?nC|TY{2{1)mbqS$Cf&0eVbOYSuCeU zE{nr)Y?zvE;aEm1Ov!oKQVcaFj;x{6d1Kzx#wRR%E-m3i>YF$ooyQqP*KsbLHdV!( zkBP}OcB0s3FJMzGsOF5CiHVoi$dR;SDcSsZOuQV&s-6)G%8ZI9)ND2{CKEWL9OWgBjZ2FHr_1IgZ2vR|4$WEH`N^_K9;G{brbcV@00hjvDRsuN-}{9D0qx z9rSx)0P(X@g+8}3U@YMsfWc3bpQi}zd{}abcX`6&Cg(YZ{)&+eF6iodf11;fam!ZO z5_;X{aRDP?JH>>Imc8DqxUHs`K2(v>Rqt)V=HG`=tR=M){=8>m(z^(#Jr1Lj?hVuB zRTo(LT!|>cU7=W52<297k(}fei(K@ughY#r_Sm?9M2m|&MuTU1CXBl`4(p4&amU8V zcllDQ4nI5SVi@f0zKOg~iUv2d$V;kwESJ^sRCN1@8zFhqLs2%jp*SOjwZT zIsAm?ExE8)>n~Aw8;NUY=o3cTwE)I+bacJjEiUum(h@H(^W8U{=T9#4C;#Ggi11#? zyC6<;7vMC_1%K+2mw3a`ecW*V4h%$Ki7zc2M!gFQa28&uc+s&+5OG2;+AqNV61y6F zC5Rk?15)W{4ted2f|KKqIX2Dpa9!LWdz}4{{ggeye!(WVx7lOtTkH&bjUDAa;6COC z$ZWvMXx_9uWNbjkS29>N&AjQcNtwK^Rw0`#e-915Fy*nPE*8=r0^(UyvsCErc}q=O zYNm=@r^aT=m>LX;s@_BE#?(baDZnJF3h7GjRa`KXG%=$(c<@->wBLwJbqy~ z88`8zI6#+@mkF4NkBp0tG2}c(R#gfrOeIimRn=N~JgQ<4*1+_t$HXb{llbegEykH5 z%-3-ngJ)Dz8=DtB)g2^rpw&`qx=nRf(=#^f5H47XX^Ezq&YKz4#0n4$@Qln=t7z(; zy7vbC8xqJ#Dh$ely0?>(m3|QSA^Ldv`p(l-Y^UTod!4<4sI%8tC@;dhh48*uCSU+S z?4@OfKFDKNNM<1Yra8$62`TkLiP;4fija1JpCP=q>?sBs0kjd23D7AXxPwyO0lo6OQ^LY^J4>7yFP)w+)Q$p5_NYSai& zJ~tG=>Z9EMsK&4z(q)$i{Ud2AO9=g+hv+174tQR^r-SS@n9v^QsoB=tn-OS6pc#Q? L1ey_e+z9*)wvrg) literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..c3ce6e93ecfbe2511750febfe66ba923c81b7921 GIT binary patch literal 1121 zcmbVKT}V_x6rQ`QwMtvJ5EYRaDVMaerA#-|3MvR$Xm{_O=&jqE2|e`l6a_xC6v4H6 z2qLHkpPcgQS{W_CbG~zC7~9%a zHUJjDAJ)00c$ome1}9+q^2*Nw@IS^Cc%8s(@1h1jmoSh0jV({|@5o#1@2T$~Hfkfn zp{|nWb<*uBG)!mO)U8O}jNq97JUXv!MXj_5?m@6K=k@tDQ`}+fjbfh2nPl(bBei?{IDGVENi+ z)@%hNe(%{MaKesVjPp|a7V#BcxzrCfAg8mcsS` z%q=+B1vX_JT)W)+ETDK33sy;jh-xhgwh*A!pkTAbl@O>lAPjC^Z;sI)pIVX)h)!Fa z)`YT!Nw!tMsQ{ba^VKe{QL9l;10v(UUO<6&cm%%7bqTO_PIGZcKyc$^E#gA26>>h< zKmx%=g=87XF%Z9$Eof^ac_qAG3JT!^QV`&LtRED0z;C&J;GR|p!c{P1zh;N`1BzCM z@anjjbzm{xk+tD<>|t=J_o`p3_pxD$i_1@VR1acTYDAic4Owun(}Oy9p(K0nE!s|> z>O#HDb0PQpa;*_j!P8C)zOV#d(1@}VEx<=VFkji07s27Y8_0?e)GO>fE?2qtxq+bY zkG~xO(fVo36QWScZA-<5mhuyjh!BL}Kf zFB)$R9mf(Qrc+PR42}$@%(M}8rX$qArV)u^!!%QiK|PhAqXrLKxmJ$$0!QOxBTh9v z(l@3%ImY8=JZ)fVrqYJavn}#BG0Tsd@i)ezdXvQ@BZ-5Sn3mGGb{~z5>5);~trOfI zeiFji`5+YPeeft`;(-uD1CJha*dKa0r1FW(_)sjpoIaSr(MU3h6S~ftn;AC8Putt* A`Tzg` literal 0 HcmV?d00001 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 +