base:novaload_tape_transfer_1.0
no way to compare when less than two revisions
Differences
This shows you the differences between two versions of the page.
— | base:novaload_tape_transfer_1.0 [2015-04-17 04:33] (current) – created - external edit 127.0.0.1 | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | ====== Novaload Tape Transfer 1.0 ====== | ||
+ | < | ||
+ | ; | ||
+ | ;Novaload Tape Transfer 1.0 | ||
+ | ; | ||
+ | ;(C) 2005 Nostalgia | ||
+ | ; | ||
+ | ;By Fungus / Nostalgia | ||
+ | ; | ||
+ | |||
+ | *= $1000 | ||
+ | |||
+ | cd = $02 | ||
+ | |||
+ | lda $ba | ||
+ | sta cd ;save current | ||
+ | ;disk drive | ||
+ | lda #$0b ; | ||
+ | sta $d011 | ||
+ | lda #$c1 ;no nmi | ||
+ | ; sta $0318 | ||
+ | lda #$80 | ||
+ | ; sta $0291 ;no char shift | ||
+ | lda #$17 | ||
+ | sta $d018 ;this set | ||
+ | lda #$00 | ||
+ | sta $9d ;st clear | ||
+ | sta $d020 | ||
+ | sta $d021 | ||
+ | lda #$2f ;i/o config | ||
+ | sta $00 ;bit 4 = input | ||
+ | lda $01 | ||
+ | and #$07 ;mem config | ||
+ | ora #$20 ; | ||
+ | sta $01 | ||
+ | lda #$00 | ||
+ | sta $0289 ;no keys | ||
+ | sta $0286 | ||
+ | |||
+ | lda #$93 | ||
+ | jsr $ffd2 ;clr screen | ||
+ | |||
+ | ldx #$00 ; | ||
+ | pm1 lda $1300,x | ||
+ | sta $0400,x | ||
+ | lda #$05 | ||
+ | sta $d800,x | ||
+ | inx | ||
+ | cpx #$a0 | ||
+ | bne pm1 | ||
+ | |||
+ | lda #$1b | ||
+ | sta $d011 | ||
+ | |||
+ | wplay lda $01 ;wait for play | ||
+ | and #$10 | ||
+ | bne wplay | ||
+ | |||
+ | jsr lod ;load header | ||
+ | |||
+ | lda $01 ;motor off | ||
+ | ora #$20 | ||
+ | sta $01 | ||
+ | |||
+ | ldx #$00 | ||
+ | xl lda loader1,x | ||
+ | sta $04a0,x | ||
+ | lda loader1+$0100, | ||
+ | sta $05a0,x | ||
+ | lda loader1+$0200, | ||
+ | sta $06a0,x | ||
+ | lda loader1+$0300, | ||
+ | sta $07a0,x | ||
+ | inx | ||
+ | bne xl | ||
+ | |||
+ | jmp $04a0 ;begin real loader | ||
+ | lod | ||
+ | lda #$01 ;open tape file | ||
+ | tax | ||
+ | tay | ||
+ | jsr $ffba | ||
+ | lda #$00 | ||
+ | jsr $ffbd | ||
+ | lda #$00 | ||
+ | sta $c0 | ||
+ | sta $93 | ||
+ | jsr $f7d7 ;load header/file | ||
+ | jmp $f84f | ||
+ | |||
+ | ; | ||
+ | ;novaload tape routine | ||
+ | |||
+ | loader1 | ||
+ | *= $04a0 | ||
+ | .offs loader1-* | ||
+ | |||
+ | savename = $0341 | ||
+ | |||
+ | moreload jsr clrmem | ||
+ | jsr putindex | ||
+ | jsr printload | ||
+ | jsr printname | ||
+ | |||
+ | sei | ||
+ | jsr i0345 ; | ||
+ | lda $90 | ||
+ | beq loadok | ||
+ | jmp loaderr | ||
+ | |||
+ | loadok | ||
+ | bne nohi1 | ||
+ | inc $ad | ||
+ | nohi1 lda $a4 ;lo end | ||
+ | sta $ae | ||
+ | lda $ad ;hi end | ||
+ | sta $af | ||
+ | lda #$01 | ||
+ | sta $ac | ||
+ | lda #$08 | ||
+ | sta $ad | ||
+ | inc header+$01 | ||
+ | jsr save | ||
+ | |||
+ | ldx #$0f | ||
+ | lda #$20 | ||
+ | clrname | ||
+ | dex | ||
+ | bpl clrname | ||
+ | |||
+ | lda #$99 ;change to sta | ||
+ | sta mod2 | ||
+ | lda #< | ||
+ | sta mod1+1 | ||
+ | lda #> | ||
+ | sta mod1+2 | ||
+ | lda #$11 ;filename 10 or < | ||
+ | sta mod3+1 | ||
+ | lda #$b0 ;bne to bcs | ||
+ | sta mod4 | ||
+ | jmp moreload | ||
+ | |||
+ | i0345 ;loader | ||
+ | lda #$f4 ;timing | ||
+ | sta $dc04 | ||
+ | lda #$81 ;$01f4+$80 = bit | ||
+ | sta $dc05 | ||
+ | lda #$01 ;load addy | ||
+ | sta $ac ; | ||
+ | lda #$07 | ||
+ | sta $ad | ||
+ | lda #$2f ;io normal | ||
+ | sta $00 | ||
+ | lda #$07 ;tape motor on | ||
+ | sta $01 | ||
+ | |||
+ | i0358 ldy #$00 | ||
+ | sty $a4 ;y index | ||
+ | sty $a3 ;init chksum | ||
+ | sty $90 ;init st | ||
+ | lda #$05 | ||
+ | |||
+ | i035e jsr i03dd ;get a bit | ||
+ | bpl i035e ;sync (#$80) | ||
+ | jsr i03db ;get a byte | ||
+ | cmp #$aa ;block id | ||
+ | bne i035e | ||
+ | jsr i03db ;get a byte | ||
+ | |||
+ | mod3 cmp #$04 ;first file is | ||
+ | mod4 bne i035e ;NOVA | ||
+ | |||
+ | sta $b7 ; | ||
+ | |||
+ | i0371 cpy $b7 ; | ||
+ | beq i037f ;no name | ||
+ | jsr i03d4 ;get filename | ||
+ | mod1 sta filename,y | ||
+ | mod2 lda $0480,y | ||
+ | iny | ||
+ | bne i0371 | ||
+ | |||
+ | i037f ldy #$00 ;get header | ||
+ | i0381 jsr i03d4 | ||
+ | sta header, | ||
+ | iny | ||
+ | cpy #$06 | ||
+ | bne i0381 | ||
+ | ldy #$00 | ||
+ | lda header+$04 | ||
+ | sta $b0 | ||
+ | lda header+$05 | ||
+ | sta $b1 | ||
+ | |||
+ | i038a jsr i03d4 ;calc chksum+get | ||
+ | ;byte | ||
+ | cmp $a3 | ||
+ | bne i03ad ; | ||
+ | lda $b1 | ||
+ | beq i03af ;eof | ||
+ | |||
+ | inc $ad ; | ||
+ | dec $b1 ; | ||
+ | bne i03a1 | ||
+ | lda $b0 | ||
+ | beq i03af ;eof | ||
+ | sta $a4 ;y index | ||
+ | |||
+ | i03a1 jsr i03d4 ;get byte | ||
+ | inc $01 | ||
+ | sta ($ac), | ||
+ | dec $01 | ||
+ | iny | ||
+ | cpy $a4 ;y index | ||
+ | bne i03a1 | ||
+ | beq i038a | ||
+ | |||
+ | i03ad lda #$30 ;error | ||
+ | i03af sta $90 ;eof | ||
+ | |||
+ | lda #$27 ;motor off | ||
+ | sta $01 | ||
+ | rts | ||
+ | |||
+ | i03d4 clc ;calc checksum | ||
+ | lda $a3 | ||
+ | adc $aa | ||
+ | sta $a3 | ||
+ | |||
+ | i03db lda #$7f ;get byte | ||
+ | i03dd pha ;get bit | ||
+ | inc $d020 | ||
+ | ldx #$11 | ||
+ | lda #$10 | ||
+ | i03e5 bit $dc0d | ||
+ | beq i03e5 | ||
+ | lda $dc05 | ||
+ | stx $dc0e | ||
+ | eor #$80 | ||
+ | asl a | ||
+ | pla | ||
+ | ror a | ||
+ | bcs i03dd | ||
+ | sta $aa | ||
+ | rts | ||
+ | |||
+ | ; | ||
+ | ;save routine | ||
+ | |||
+ | save | ||
+ | lda #$00 ;save file | ||
+ | sta $d020 ; | ||
+ | |||
+ | jsr printsave | ||
+ | |||
+ | lda #$01 ;open file for | ||
+ | ldx cd ;write | ||
+ | ldy #$01 | ||
+ | jsr $ffba ; | ||
+ | lda #$10 | ||
+ | ldx #$41 ;$0341 16 chars | ||
+ | ldy #$03 | ||
+ | jsr $ffbd ; | ||
+ | jsr $ffc0 ;open | ||
+ | ldx #$01 | ||
+ | jsr $ffc9 ; | ||
+ | lda $ac ; | ||
+ | jsr $ffa8 ;send | ||
+ | lda $ad ; | ||
+ | jsr $ffa8 ;send | ||
+ | |||
+ | ldy #$00 ;save the file | ||
+ | saveb sei | ||
+ | inc $01 | ||
+ | lda ($ac),y | ||
+ | dec $01 | ||
+ | jsr $ffa8 | ||
+ | inc $d020 | ||
+ | dec $d020 | ||
+ | |||
+ | inc $ac | ||
+ | bne b1 | ||
+ | inc $ad | ||
+ | b1 lda $ad | ||
+ | cmp $af | ||
+ | bne saveb | ||
+ | lda $ac | ||
+ | cmp $ae | ||
+ | bne saveb | ||
+ | |||
+ | lda #$01 | ||
+ | jmp $ffc3 ; | ||
+ | |||
+ | ; | ||
+ | ;utility subroutines | ||
+ | |||
+ | loaderr | ||
+ | lda #$02 ;print tape load | ||
+ | sta $d020 ; | ||
+ | ldx #$17 | ||
+ | perr1 lda et1,x | ||
+ | and #$3f | ||
+ | sta $0478,x | ||
+ | lda #$01 | ||
+ | sta $d878,x | ||
+ | dex | ||
+ | bpl perr1 | ||
+ | jmp * ; | ||
+ | |||
+ | printload | ||
+ | ldx #$07 ;print loading | ||
+ | ll lda lt,x ;text | ||
+ | and #$3f | ||
+ | sta $0478,x | ||
+ | lda #$05 | ||
+ | sta $d878,x | ||
+ | dex | ||
+ | bpl ll | ||
+ | rts | ||
+ | |||
+ | printsave | ||
+ | ldx #$07 | ||
+ | dl lda st,x ;print save text | ||
+ | and #$3f | ||
+ | sta $0478,x | ||
+ | lda #$05 | ||
+ | sta $d878,x | ||
+ | dex | ||
+ | bpl dl | ||
+ | rts | ||
+ | |||
+ | printname | ||
+ | ldx #$0f ;print name | ||
+ | ln lda savename,x | ||
+ | and #$7f | ||
+ | sta savename,x | ||
+ | and #$3f | ||
+ | sta $0480,x | ||
+ | dex | ||
+ | bpl ln | ||
+ | rts | ||
+ | |||
+ | putindex | ||
+ | lda fileidx | ||
+ | inc fileidx | ||
+ | pha | ||
+ | lsr a | ||
+ | lsr a | ||
+ | lsr a | ||
+ | lsr a | ||
+ | jsr convert1 | ||
+ | sta savename+$0e | ||
+ | pla | ||
+ | and #$0f | ||
+ | jsr convert1 | ||
+ | sta savename+$0f | ||
+ | rts | ||
+ | |||
+ | convert1 ora #$30 | ||
+ | cmp #$3a | ||
+ | bcc convert2 | ||
+ | adc #$06 | ||
+ | convert2 rts | ||
+ | |||
+ | clrmem | ||
+ | sei | ||
+ | inc $01 | ||
+ | lda #$08 | ||
+ | sta clrit+$02 | ||
+ | lda #$00 | ||
+ | tax | ||
+ | clrit sta $0800,x | ||
+ | inx | ||
+ | bne clrit | ||
+ | inc clrit+$02 | ||
+ | bne clrit | ||
+ | dec $01 | ||
+ | cli | ||
+ | rts | ||
+ | |||
+ | ;Transfer Messages | ||
+ | |||
+ | fileidx | ||
+ | |||
+ | et1 .text "Load Error! | ||
+ | .text " | ||
+ | lt .text " | ||
+ | st .text " | ||
+ | |||
+ | filename .text " | ||
+ | header | ||
+ | </ | ||
base/novaload_tape_transfer_1.0.txt · Last modified: 2015-04-17 04:33 by 127.0.0.1