diff --git a/directi-dos.zip b/directi-dos.zip
new file mode 100644
index 0000000..10e0253
Binary files /dev/null and b/directi-dos.zip differ
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.