diff --git a/024.simple_text/Makefile b/024.simple_text/Makefile
index fb3ea20..e885d10 100644
--- a/024.simple_text/Makefile
+++ b/024.simple_text/Makefile
@@ -5,7 +5,7 @@ BASE_ADDRESS=4000 # if you change this you must also change link.script.x
# note: this must be high enough not to conflict with MFMbufE
BOOTBLOCK_ASM=alpine_bootblock.s
-OBJS=out/init.o out/utils.o out/trackloader.o out/image.o out/disk.o out/blittext.o out/cpu.o out/blit.o
+OBJS=out/init.o out/utils.o out/image.o out/blittext.o out/cpu.o out/blit.o
IMAGES=font.png
IMAGEDATA=$(addprefix out/, $(IMAGES:.png=.bin))
diff --git a/024.simple_text/README.md b/024.simple_text/README.md
index aacc3ee..d269e73 100644
--- a/024.simple_text/README.md
+++ b/024.simple_text/README.md
@@ -1,19 +1,9 @@
-photo slideshow
-===============
+simple text
+===========
-The main theme of this demo is trackloading data whilst the application is running.
-
-We cram a DD floppy full of image and music data, then load and display each image in turn whilst playing a P61 module.
-
-There are quite a few new things in here:
-
- * We use a [modified bootloader](alpine_bootloader.s) that reads the size of the main program from the disk before trackloading it.
- * Photon's trackloader is also now copied into the main program so it can be used to load subsequent data.
- * We use multiple sections and a [linker script](link.script.x) to help with organising data on the ADF image. The linker script is not technically required, however I wanted to see what I could do with vlink and linker scripts.
- * We switched to the [doynamite68k](https://github.com/AxisOxy/Planet-Rocklobster/tree/master/tools/doynamite68k) compressor/decompressor. The compressed file are larger than those generated by Shinkler, however the decompressor is a lot faster.
- * P61 is configured to use CIA mode.
+Work in progress
try it
------
- * [Download disk image](bin/slideshow.adf?raw=true)
- * Run in SAE
+ * [Download disk image](bin/simple_text.adf?raw=true)
+ * Run in SAE
diff --git a/024.simple_text/disk.s b/024.simple_text/disk.s
deleted file mode 100644
index b763365..0000000
--- a/024.simple_text/disk.s
+++ /dev/null
@@ -1,27 +0,0 @@
- xdef LoadDiskData
-
-LoadDiskData:
- ;; a0 - destination address
- ;; a1 - start address
- ;; d0 - size
- movem.l d0-a6,-(sp)
- lea $dff002,a6 ; LoadMFMB uses this custom base addr
-
- move.l d0,d1
-
- move.l a1,d0
- move.l #startCode,d2
- sub.l d2,d0 ; offset from start of this module
- lsr.l #6,d0 ; bytes -> sectors
- lsr.l #3,d0
- add.l #2,d0 ; offset for bootblock
-
-
- add.l #512,d1
- lsr.l #6,d1 ; bytes -> sectors
- lsr.l #3,d1
- neg.w d1
- jsr LoadMFMB ; load the data!
-
- movem.l (sp)+,d0-a6
- rts
diff --git a/024.simple_text/font.png b/024.simple_text/font.png
deleted file mode 100644
index 67f0b54..0000000
Binary files a/024.simple_text/font.png and /dev/null differ
diff --git a/024.simple_text/module.s b/024.simple_text/module.s
deleted file mode 100644
index fd10212..0000000
--- a/024.simple_text/module.s
+++ /dev/null
@@ -1,21 +0,0 @@
- xdef LoadModule
-
-LoadModule:
- movem.l d0-a6,-(sp)
- lea bitplanes1,a0
- lea compressedModule,a1
- move.l #endCompressedModule,d0
- sub.l #compressedModule,d0
- ;; a0 - destination address
- ;; a1 - start address
- ;; d0 - size
- jsr LoadDiskData
-
- ;; a0 - input buffer to be decompressed. Must be 16-bit aligned!
- ;; a1 - output buffer. Points to the end of the data at exit
- lea bitplanes1,a0
- lea Module,a1
- jsr Depack
-
- movem.l (sp)+,d0-a6
- rts
\ No newline at end of file
diff --git a/024.simple_text/trackloader.s b/024.simple_text/trackloader.s
deleted file mode 100644
index 92cf07a..0000000
--- a/024.simple_text/trackloader.s
+++ /dev/null
@@ -1,203 +0,0 @@
-*** MFMLoader.S by Photon *** ;requires a6=$dff002
-
- xdef LoadMFMB
-
-MFMsync equ $4489 ;AmigaDOS standard sync marker.
-MFMlen equ 12980 ;Legacy trackdata read length in bytes
-
-ShortWt:MACRO ;CPU-independent nop;nop replacement
- tst.w (a6)
- ENDM
-
-MFMcyl: dc.w 0
-MFMhead: dc.w 0
-MFMdrv: dc.w 0
-MFMchk: dc.l 0
-
-LoadMFMB: ;loadsectors.a0=dst,d0=startsec.W,d1=nrsecs.W(-=Step0)
- MOVEM.L D0-D7/A0-A6,-(SP)
- lea $bfd100,a4
- bsr MotorOn
- tst.w d1 ;if neg length,then Step0 first
- bpl.s .NoSt0
- neg.w d1
-.St0: btst #4,$f01(a4) ;head on cyl 0?
- beq.s .Rdy0
- bsr.s StepOut
- bra.s .St0
-.Rdy0: lea MFMcyl(PC),a1
- clr.w (a1)
-.NoSt0: and.l #$ffff,d0
- divu #22,d0 ;startcyl
- sub.w MFMcyl(PC),d0 ;delta-step
- beq.s .StRdy
- bmi.s .StOut
- subq.w #1,d0
-.StIn: bsr.s StepIn
- dbf d0,.StIn
- bra.s .StRdy
- not.w d0 ;=neg+sub#1
-.StOut: bsr.s StepOut
- dbf d0,.StIn
-.StRdy: swap d0 ;startsec within cyl
- cmp.w #11,d0
- blt.s .Head0
- sub.w #11,d0
- bra.s .Head1
-.Head0: bset #2,(a4)
- lea MFMhead(PC),a1
- clr.w (a1)
- bsr LoadTrak ;read track+decode
- beq.s .End
-.Head1: bclr #2,(a4) ;Head 1
- lea MFMhead(PC),a1
- move.w #1,(a1)
- bsr LoadTrak ;read track+decode
- beq.s .End
- bsr.s StepIn ;1 cyl forward
- bra.s .Head0
-.End: bsr.s MotorOff
- MOVEM.L (SP)+,D0-D7/A0-A6
- RTS
-
-StepOut:
- bset #1,(a4)
- lea MFMcyl(PC),a1
- subq.w #1,(a1)
- ShortWt
- bclr #0,(a4)
- ShortWt
- bset #0,(a4)
- bsr.s StepWt
- RTS
-
-StepIn:
- bclr #1,(a4)
- lea MFMcyl(PC),a1
- addq.w #1,(a1)
- ShortWt
- bclr #0,(a4)
- ShortWt
- bset #0,(a4)
- bsr.s StepWt
- RTS
-
-StepWt:
- moveq #67,d6 ;wait >3 ms
-LeaveLine:
-.loop1: move.b 6-2(a6),d7
-.loop2: cmp.b 6-2(a6),d7
- beq.s .loop2
- dbf d6,.loop1
- RTS
-
-MotorOn:
- move.w MFMdrv(PC),d7
- addq.w #3,d7
- or.b #$78,(a4)
- bset d7,(a4)
- ShortWt
- bclr #7,(a4) ;turns motor on
- ShortWt
- bclr d7,(a4)
- ShortWt
-.DiskR: btst #5,$f01(a4) ;wait until motor running
- bne.s .DiskR
- RTS
-
-MotorOff:
- move.w MFMdrv(PC),d7
- addq.w #3,d7
- bset d7,(a4)
- ShortWt
- bset #7,(a4)
- ShortWt
- bclr d7,(a4)
- RTS
-
-LoadTrak: ;loadtrack+decode.a0=dst,d0=secoffs,d1=secsleft
- MOVE.W D0,-(SP)
- MOVE.W D1,-(SP)
- lea MFMbuf,a1
- move.w #2,$9c-2(a6) ;Clr Req
- move.l a1,$20-2(a6)
- move.w #$8210,$96-2(a6) ;DskEna
- move.w #MFMsync,$7e-2(a6)
- move.w #$9500,$9e-2(a6)
- move.w #$4000,$24-2(a6)
- move.w #$8000+MFMlen/2,$24-2(a6);DskLen(12980)+DmaEn
- move.w #$8000+MFMlen/2,$24-2(a6);start reading MFMdata
-.Wrdy:
- btst #1,$1f-2(a6) ;wait until data read
- beq.s .Wrdy
- move.w d0,d2
- add.w d1,d2 ;highest sec# (d0=lowest)
- cmp.w #11,d2
- ble.s .NoOvr
- moveq #11,d2
-.NoOvr: sub.w d0,d2 ;nrsecs
- move.l #$55555555,d3 ;and-const
- move.w d2,d1
- subq.w #1,d1 ;loopctr
-.FindS: cmp.w #MFMsync,(a1)+ ;search for a sync word
- bne.s .FindS
- cmp.b (a1),d3 ;search for 0-nibble
- bne.s .FindS
- move.l (a1)+,d4 ;decode fmtbyte/trk#,sec#,eow#
- move.l (a1)+,d5
- and.w d3,d4
- and.w d3,d5
- add.w d4,d4
- or.w d5,d4
- lsr.w #8,d4 ;sec#
- sub.w d0,d4 ;do we want this sec?
- bmi.s .Skip
- cmp.w d2,d4
- blt.s .DeCode
-.Skip: lea 48+1024(a1),a1 ;nope
- bra.s .FindS
-.DeCode:lea 40(a1),a1 ;found a sec,skip unnecessary data
- move.l a1,d6
- lea MFMchk(PC),a1
- clr.l (a1)
- move.l d6,a1
- move.l (a1)+,d6 ;decode data chksum.L
- move.l (a1)+,d5
- and.l d3,d6
- and.l d3,d5
- add.l d6,d6
- or.l d5,d6 ;chksum
- lea 512(a1),a2
- add.w d4,d4 ;x512
- lsl.w #8,d4
- lea (a0,d4.w),a3 ;dest addr for this sec
- moveq #127,d7
-.DClup: move.l (a1)+,d4
- move.l (a2)+,d5
- and.l d3,d4
- and.l d3,d5
- eor.l d4,d6 ;EOR with checksum
- eor.l d5,d6 ;EOR with checksum
- add.l d4,d4
- or.l d5,d4
- move.l d4,(a3)+
- dbf d7,.DClup ;chksum should now be 0 if correct
- lea MFMchk(PC),a1
- or.l d6,(a1) ;or with track total chksum
- move.l a2,a1
- dbf d1,.FindS ;decode next sec
- MOVE.W (SP)+,D1
- MOVE.W (SP)+,D0
- move.l MFMchk(PC),d3 ;track total chksum OK?
- bne LoadTrak ;no,retry
- moveq #0,d0 ;set to start of track
- move.w d2,d3
- add.w d3,d3
- lsl.w #8,d3
- add.w d3,a0
- sub.w d2,d1 ;sub #secs loaded
- RTS
-
-;MFMbuf is placed here after bootblock end, $3c0.w or so when copied.
-MFMbuf:
- dcb.b MFMlen