From da6232ca8d9d3d7d31e78dbf6900f379de8ab650 Mon Sep 17 00:00:00 2001 From: Peter Ferrie Date: Tue, 29 Nov 2016 16:34:48 -0800 Subject: [PATCH] initial commit --- directi-dos.zip | Bin 0 -> 8543 bytes fstbt.s | 107 ++++++++++++++++++++++++++++++++++++++++++++++++ readme.md | 2 + 3 files changed, 109 insertions(+) create mode 100644 directi-dos.zip create mode 100644 fstbt.s create mode 100644 readme.md diff --git a/directi-dos.zip b/directi-dos.zip new file mode 100644 index 0000000000000000000000000000000000000000..10e02535beba43280c14caa0c2e02cd5d1583d5f GIT binary patch literal 8543 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 literal 0 HcmV?d00001 diff --git a/fstbt.s b/fstbt.s new file mode 100644 index 0000000..f28355b --- /dev/null +++ b/fstbt.s @@ -0,0 +1,107 @@ +;fast boot-loader in one sector +;"special delivery" version for Directi-DOS +;copyright (c) Peter Ferrie 2016 +;thanks to 4am for inspiration and testing +;assemble using ACME +!cpu 6502 +!to "fstbt",plain +*=$800 + +!byte 1 + + tay ;A is last read sector+1 on entry + lda $C081 ;bank in ROM while leaving RAM write-enabled if it was before + + ;check array before checking sector number + ;allows us to avoid a redundant seek if all slots are full in a track, + ;and then the list ends + +incindex + inc adrindex + 1 ;select next address + +adrindex + lda adrtable - 1 ;15 entries in first row, 16 entries thereafter + sta $4FB ;set 80-column state (final store is an #$FF to disable it) + cmp #$FF + beq jmpoep ;#$C0 means end of data + sta $27 ;set high part of address + + ;2, 4, 6, 8, $0A, $0C, $0E + ;because PROM increments by one itself + ;and is too slow to read sectors in purely incremental order + ;so we offer every other sector for read candidates + + iny + cpy #$10 + bcc setsector ;cases 1-$0F + beq sector1 ;finished with $0E + ;next should be 1 for 1, 3, 5, 7... sequence + + ;finished with $0F, now we are $11, so 16 sectors done + + jsr seek ;returns A=0 + + ;back to 0 + + tay + !byte $2C ;mask LDY #1 +sector1 + ldy #1 + +setsector + sty $3D ;set sector + iny ;prepare to be next sector in case of unallocated sector + lda $27 + beq incindex ;empty slot, back to the top + + ;convert slot to PROM address + + txa + lsr + lsr + lsr + lsr + tay + ora #$C0 + pha + lda #$5B ;read-1 + pha + lda #2 + sta $478, y ;save current phase for DOS use when we exit + lda $C083 + lda $C083 ;write-enable RAM and bank it in so read can decode + rts ;return to PROM + +seek + inc $41 ;next track + asl $40 ;carry clear, phase off + jsr seek1 ;returns carry set, not useful + clc ;carry clear, phase off + +seek1 + jsr delay ;returns with carry set, phase on + inc $40 ;next phase + +delay + lda $40 + and #3 + rol + ora $2B ;merge in slot + tay + lda $C080, y + lda #$30 + jmp $FCA8 ;common delay for all phases + +jmpoep + jsr $FE89 ;rehook keyboard (needed particularly after PR#) + jsr $FE93 ;rehook video + jsr $FB2F ;text mode + sta $C00C + sta $C00E ;clear 80-column mode + lda $C083 ;bank in our RAM, write-enabled + jmp $D000 ;jump to unpacker + +adrtable +!byte $dd,$dc,$db,$da,$d9,$d8,$d7,$d6,$d5,$d4,$d3,$d2,$d1,$d0,$de +!byte $df,$ed,$ec,$eb,$ea,$e9,$e8,$e7,$e6,$e5,$e4,$e3,$e2,$e1,$e0,$ee +!byte $FF ;end of list diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..e1a82be --- /dev/null +++ b/readme.md @@ -0,0 +1,2 @@ +This is Diversi-DOS for the Apple II, crammed into two tracks, and loading directly into the Language Card.
+Powered by the Standard Delivery loader, and aPLib compression.