From 9ad4a8c17be08e750bae8b0a528915c176bc7635 Mon Sep 17 00:00:00 2001 From: Vince Weaver Date: Fri, 21 Aug 2020 01:26:14 -0400 Subject: [PATCH] qboot: sample tests --- qboot/80s.s | 19 ++++++++++++++++ qboot/Makefile | 28 ++++++++++++++++++----- qboot/boot_sector.s | 53 +++++++++++++++++++++++++++++--------------- qboot/new_80s.png | Bin 0 -> 22271 bytes qboot/stage2.s | 18 +++++++++++---- 5 files changed, 91 insertions(+), 27 deletions(-) create mode 100644 qboot/80s.s create mode 100644 qboot/new_80s.png diff --git a/qboot/80s.s b/qboot/80s.s new file mode 100644 index 00000000..5db27367 --- /dev/null +++ b/qboot/80s.s @@ -0,0 +1,19 @@ + +SET_GR = $C050 +FULLGR = $C052 +PAGE0 = $C054 +HIRES = $C057 + +the_1980s: + +forever: + bit SET_GR + bit FULLGR + bit PAGE0 + bit HIRES + + jmp forever + +.align $100 + +.incbin "new_80s.hgr" diff --git a/qboot/Makefile b/qboot/Makefile index 6203d799..7854b5c2 100644 --- a/qboot/Makefile +++ b/qboot/Makefile @@ -1,12 +1,20 @@ include ../Makefile.inc +DOS33 = ../dos33fs-utils/dos33 DOS33_RAW = ../dos33fs-utils/dos33_raw -all: boot.dsk +all: boot.dsk compare.dsk -boot.dsk: BOOT +compare.dsk: THE80S + cp empty.dsk compare.dsk + $(DOS33) -y compare.dsk BSAVE -a 0x1f00 THE80S + +boot.dsk: BOOT THE80S cp empty.dsk boot.dsk - $(DOS33_RAW) boot.dsk 0 0 BOOT + $(DOS33_RAW) boot.dsk 0 0 BOOT 0 1 + $(DOS33_RAW) boot.dsk 0 2 BOOT 1 1 + $(DOS33_RAW) boot.dsk 0 4 BOOT 2 1 + $(DOS33_RAW) boot.dsk 3 0 THE80S 0 33 BOOT: boot_sector.o ld65 -o BOOT boot_sector.o -C ../linker_scripts/apple2_800.inc @@ -14,6 +22,16 @@ BOOT: boot_sector.o boot_sector.o: boot_sector.s stage2.s ca65 -o boot_sector.o boot_sector.s -l boot_sector.lst -clean: - rm -f *~ *.o *.lst BOOT + +THE80S: 80s.o + ld65 -o THE80S 80s.o -C ../linker_scripts/apple2_1f00.inc + +80s.o: 80s.s new_80s.hgr + ca65 -o 80s.o 80s.s -l 80s.lst + +new_80s.hgr: new_80s.png + ../hgr-utils/png2hgr new_80s.png > new_80s.hgr + +clean: + rm -f *~ *.o *.lst BOOT THE80S diff --git a/qboot/boot_sector.s b/qboot/boot_sector.s index eab17dd1..d769190d 100644 --- a/qboot/boot_sector.s +++ b/qboot/boot_sector.s @@ -1,11 +1,11 @@ ; fast seek/multi-read ; copyright (c) Peter Ferrie 2015-16 - sectors = $d1 ; user-defined - firsttrk = $d1 ; user-defined, first track to read - firstsec = $d1 ; user-defined, first sector to read - address = $d1 ; user-defined - entry = $d1d1 ; user-defined + sectors = 33 ; user-defined + firsttrk = 3 ; user-defined, first track to read + firstsec = 0 ; user-defined, first sector to read + address = $1f ; user-defined + entry = $1f00 ; user-defined version = 1 ;memory usage: @@ -13,13 +13,13 @@ grouped = $bd00 ;106 bytes ($xx00-xx69) static table preshift = code_end - zvalue = $fd ;only during init - znibble = $fe ;only during init - zmask = $ff ;only during init + zvalue = $fd ; only during init + znibble = $fe ; only during init + zmask = $ff ; only during init -; $26/$27 sector read location (ROM), scratch space (RWTS) -; $3D sector number +; $26/$27 sector read location (ROM) +; $3D sector number (ROM) ; at entry (at least on AppleWin) A=1, X=60, Y=0 @@ -68,19 +68,32 @@ boot_entry: rts not_three: + + ; patch self modifying code for Q6L read + txa ora #$8c ; slot to Q6L ; Q6L? - ; 1000 1100 + ; if slot 6, after this A is $EC patch_loop: iny - ldx patchtbl-3, y - sta code_begin, x ;replace placeholders with Q6L + ldx patchtbl-3, Y + sta code_begin, X ; replace placeholders with Q6L + ; BE02 = EC? lda c0ec + ; so sets to c08c (Q6L) + bne patch_loop - and #$f8 ;MOTOROFF + + ; patch self-modifying code for turning motor off + + and #$f8 ; MOTOROFF (c088) sta slotpatch7+1 - eor #8 ;PHASEOFF + + ; patch self-modifying code for phase off + + eor #8 ; PHASEOFF (c080) sta slotpatch8+1 + ldx #$3f stx zmask inx @@ -89,17 +102,21 @@ patch_loop: bne skip_ahead ; branch always ; pad with zeros until $839 + ; $839 is the entry point + ; adjusts address at $8FE to be entry point + ; jumps to boot 2 .res $839-* -;*=$839 + lda #>(entry-1) pha lda #<(entry-1) pha jsr preread - jmp $bf00 ;DOS 3.3 launcher entrypoint + jmp $bf00 ; DOS 3.3 launcher entrypoint patchtbl: - .byte <(slotpatch1+1), <(slotpatch2+1), <(slotpatch3+1), <(slotpatch4+1), <(slotpatch5+1), <(slotpatch6+1) + .byte <(slotpatch1+1), <(slotpatch2+1), <(slotpatch3+1) + .byte <(slotpatch4+1), <(slotpatch5+1), <(slotpatch6+1) indextbl: ;the 0 also terminates the patchtbl list! .byte 0, 2, 1, 3 diff --git a/qboot/new_80s.png b/qboot/new_80s.png new file mode 100644 index 0000000000000000000000000000000000000000..0dfbc4c50e89ef830aff3c3cc4cd9902f51cca5f GIT binary patch literal 22271 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 eEGPd%H2n(^IAy6yb19hs0000!{fP literal 0 HcmV?d00001 diff --git a/qboot/stage2.s b/qboot/stage2.s index 3f0ce047..03e7d717 100644 --- a/qboot/stage2.s +++ b/qboot/stage2.s @@ -1,5 +1,15 @@ -;the following lives on sectors $0E and $0D -; ???? +; the following lives on sectors $0E and $0D +; why? +; request sector 2 and 4, and the interleave is + +; beneath apple dos (3-23) +; Physical (firmware) : 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 +; DOS33 mapping : 0, 7, 14, 6, 13, 5, 12, 4, 11, 3, 10, 2, 9, 1, 8, 15 + + +; Beneath Apple DOS +; p86 (dos reference) +; .org $be00 @@ -8,8 +18,8 @@ code_begin: .byte version readnib: -slotpatch1: - lda $c0d1 ; ??? +slotpatch1: ; smc + lda $c0d1 ; gets set to C08C (Q6L) read bpl readnib rts