From 2158da23086a24827d8ecd7886318bd33b5621e3 Mon Sep 17 00:00:00 2001 From: Zellyn Hunter Date: Tue, 24 Jan 2017 23:28:19 -0600 Subject: [PATCH] add softswitch read test --- README.md | 4 + audit/audit.asm | 24 ++++- audit/audit.dsk | Bin 143360 -> 143360 bytes audit/auxmem.asm | 8 +- audit/softswitch.asm | 243 +++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 273 insertions(+), 6 deletions(-) create mode 100644 audit/softswitch.asm diff --git a/README.md b/README.md index 52235f1..d292482 100644 --- a/README.md +++ b/README.md @@ -23,9 +23,13 @@ Error messages can be viewed at - [x] sha1sum assembly code (currently not used yet because it's slow) - [x] language card tests - [x] main/auxiliary memory softswitch behavior tests +- [x] softswitch reading tests ### TODO +- [ ] Incorporate Cxxx testing into data-driven test +- [ ] Add testcases for Cxxx testing +- [ ] weirder softswitch behavior corner cases - [ ] floating-bus tests ## Raison d'être diff --git a/audit/audit.asm b/audit/audit.asm index fc5528c..4c53578 100644 --- a/audit/audit.asm +++ b/audit/audit.asm @@ -11,6 +11,7 @@ LCRESULT = $10 LCRESULT1 = $11 AUXRESULT = $12 + SOFTSWITCHRESULT = $13 CSW = $36 KSW = $38 @@ -31,11 +32,13 @@ !addr DST = $08 !addr SHAINPUT = $eb !addr SHALENGTH = $ee + !addr tmp0 = $f9 !addr tmp1 = $fa !addr tmp2 = $fb !addr tmp3 = $fc !addr tmp4 = $fd !addr tmp5 = $fe + !addr tmp6 = $ff ;; Softswitch locations. RESET_80STORE = $C000 @@ -62,6 +65,14 @@ SET_SLOTC3ROM = $C00B READ_SLOTC3ROM = $C017 + RESET_80COL = $C00C + SET_80COL = $C00D + READ_80COL = $C01F + + RESET_ALTCHRSET = $C00E + SET_ALTCHRSET = $C00F + READ_ALTCHRSET = $C01E + RESET_TEXT = $C050 SET_TEXT = $C051 READ_TEXT = $C01A @@ -77,9 +88,14 @@ RESET_HIRES = $C056 SET_HIRES = $C057 READ_HIRES = $C01D - + RESET_INTC8ROM = $CFFF + ;; Readable things without corresponding set/reset pairs. + READ_HRAM_BANK2 = $C011 + READ_HRAMRD = $C012 + READ_VBL = $C019 + ;; CXXX utility routine locations AUXMOVE = $C311 ;; Monitor locations. @@ -118,6 +134,9 @@ main: ;; Auxiliary memory card tests. jsr AUXMEMTESTS + ;; Tests of softswitch-reading + jsr SOFTSWITCHTESTS + ;; ROM SHA-1 checks. ;; jsr SHASUMTESTS - do this later, because it's SLOW! @@ -129,8 +148,9 @@ end: !src "langcard.asm" !src "auxmem.asm" - ;!src "shasumtests.asm" + !src "softswitch.asm" !src "resetall.asm" + ;!src "shasumtests.asm" print lda $C081 diff --git a/audit/audit.dsk b/audit/audit.dsk index 53657d978343dd52f179d8f6fece365dfc4fe49b..9c466c6a9a4055aa45b69577ab774e8b7a3cea76 100644 GIT binary patch delta 2785 zcmZuyeQXow8NUzv>^KRyih++Z ziux_}4i--7|Mt_AQ*OG9g?A|GlzyKdVEtDGWjAE`|I{u$Z*L4=6z)*#KQ#UOX3F`? z7&R$=0aA4FOCm_T55I4U4}{pSF#IT#cux?gg+5N46Z#zDyr3*Z96i*~f&hV`MG~vL zCm3~8Qvey8BAiSCn&pfc6Vd0U^n5e&hL@tOzo$KRPblkx#Oej-H6QXWiT@J1XN5OE z7aA8n_*}ru06q5Rw18>d75k5%+m$d7Ajem&*$t1z8E(y{v;LO^jn#i{nxb@xGaz^} z^@X5U!w{)21>J4=syks2;%Ia16b@UQRj&!td_!}gJ{o=YP!ZAeLxqY|_0Rzd)3_Ql zn8j7thV9scIqbljuoIWz&De#@@fKWxE3p@Ez#DM`-iLpPYw%0>N4OUM81Kh*_yB$x z*JF{vq78RbtSH@b?s$@B1D312c#-GDetza6ud_4#d~ABj;Gn(#cf9nZqbYm`qIdb3 zJ0yB{HTpLmvB%KvIa6w2lGA6=Pk3~_Ri@6&_c-HAZf8#yLG;)Dtk23+d~q3M)_`YB z(C6%VeJ!{?JxuaP=JdA|TVzhAdZ;+}oB7+E&fIoPt?e2wrBQ2YSzV#Q+OGeH3H5s+ zt*=UFngi%!s5%g#Py6g>BxLMiQ96Wfgib%rzCXC|hxzwmX7pD$CO3=jhR|&2!cy-e z!0cG0vG_7Z7Y;cXnqgRmWtEL0y8=rM&aKs@pbdggSP9~O$dUFsw>FzWnr0cBO{rSR zG~-ay1`!q_9ug^avyx@!vtfmfRKa#?wgEe83BeTIA;lBn6h7imod4q-0|McrFi^=- zO!_j6!a{Wuu-QN(Fl<)46%ycz9h93usSGDdFP3p(YdR>zGK#|*z^cVqwVW%`t#S;_ z+E|-XMvNdXz?5JeOvx&)x-j3n06TDU=ZRhZUmV)gw^%I*Pt5o8fJNp{EDU|v7U70I zlJ>d2PWMSCT|c1vrL3#bLqs3X!s3f%7+nsCPK^F3RhGZ<)Ldkz(i+(XtH0CuJNQ~= zo*Ii~boIlw?zawI{iv-wDxEI>-hp$iNNO#$hgNWui|AY{Ed0ZsC7FV|%j(@0ao9Nu zt_O7RC||lI{7o%maY}mxSJ9^})o&lBB2<*QP5aBF?G^Ht89{pi7Gm}&EX3x{KDW-H zrcVEB(qAeN8&H0Bw(@JP=2v4B_J8+P@dfEyl{Mk#TF~W=xY;Gs@mQCXcgbjod6)Je zV12gC`p0?}+;4Fzbvz5i<5`nvEE7HJMZ>?A$B5peaY`yyy2CJ%6+Q9Ei38Z7b!;ZH$#!F55S=Ai$*fW}2Vx*hE$ z!NWno8PsXww&+(4J31LO?jkW5n-(tZAy8$-!gzN`73^buB$A=QAUP z{0*%zJSG>^e8J?BFY9A!-VCggrEG20H=}$`O(aS68#%3@k}q59pejfhS_V298b(=BmnbH+f@qe8^UCCIT_Kak zFa2@c#9%IXhNJwT30&uk>BKdd3j}CMHC@m~Zkar?hH9!fktk@Hv}p_}Q|dCBCv(YU zU-Ly>&*Tbfaye~yEzerFel?=8>DG{tF4GD31UD delta 2208 zcmZuwTTB#Z7@e7acUTrssDNDEzoZJ1T36A8XreSt8f`YUH(MWyE*F^{M7xL&O-!@2 zb=4-0MJH*hzD&3nCo&DI#9M>e0S27F?hfpdYM*#$l(dmd`_NVp=r=P92=lAIul?ieL7r`_SmoK_^KAF=vaKw)fc>3Vd6DGpN`8R~2EGdJ5l;p8R${7$ ze00IfhDpsSF|1}616(aD9bw&hs$I`kX+2Z5X~?7aRHU5{-QX^^ay6_(Oh$aHmM0Nf zgk`l%iAY2mS{oem<^%@o|OBbOEEG=|V<&KCjdG`J5+<;X`zJpc<-&ndxey zdU(0|34?1-;i?xR2VAe?OUTFhU=WRC;XlDO!vACL7;7~V3GN8XdD$+SYht@nxZ|ui z8%${@`cAM===;K`WgKDkqNyo>^qe3q5P*)+`iIjdq`jEZ;+5Dn--bLnKG7RDWQDHKUjh(btQ%b_rrg!$JU`P&zZHYjFU74D#= zp-2)Tn@xO;vnMrXg>Q1?Z!l!GWIfyPTuJG0Y~??vw*?SfA_YY&1PCaK5)lYYz-EKC zz_3{kOC-QWJA^R-P?#jz>S2*6a6*)rVvS>&QI?rwDGq+qnvO&^WD`@3>6S(VPa6`Q z$=n9a|CE}$&zcL2pqRd7v?wEC03%z*;tF94i}BVNR`l46R-sSfOMJT1Rrajz`b_66 zjy0U!b!NAxscv7_%e=KEHXE0GMo#Fy$tTX3#@ULfFGvU)cJQ|z?v2+iT@lRo_GocS4hN^2j52z3EY z=)Ky!ACD42qK$e=dT4%gy0E^6Rp0Kh<3CSUdU0+`SEfee@)l1$Kbelv=`qZsjP1^y zH4+i_RMl{M_`MkgrS4jMzd1yJKaMr8Y7=qI>l-B3{66gFTQhP4&>N0HeCQ=6{J4dYz6l3#wqL4YGws;r z*VEOiHajl!>j=C3aM(1bK(v#%((e(xD&3Z?+3^9Rc+?L#gWQW}}e#UyPdO?J+Xo{$|6y1r({Cd$HtQ(f78DIBexfbU%dpf)# z5zK^Ce9xK>kXLN%AYEyf3)WDG;WGG4fDC85iQp*n|=tP&fhufzH2n zxo~|hViHO`p+<)VdE&7UQ6g4#OW`I%ez36g0AhZTqY0s3j*f(c&cV>#enY>6-CBi> z%Mqb-NC^!YtiI0P-k*nK389m~`x(o6q%c1lF-Z_Hf^1eH(Z7Yo8Hni?mP&j{QAz0v zWXZe_3}2~0)MG^j#@y$MTxl?{&^gd!ju|R)twqeJ937sJhZSK!9v|e#3fFBx%$?p5 zAvP|ID)IOO)r=-<+NdI^s-TTd#7#tr4w^2m;*z4}O|5VP9(1oR#>Tz^#rejqx;QUz zOMtMZiMcZ&5fcVt(S)oDsQ49AVR zgebhb_=Kj##uLh5Qa11^Pca^Z8%p$%44>AZXs96YIN!6OAU3bj#V VAIYBIlCE>4i@Zy^sD(_D_z!-l$C&^C diff --git a/audit/auxmem.asm b/audit/auxmem.asm index 37f15b5..eaeaa67 100644 --- a/audit/auxmem.asm +++ b/audit/auxmem.asm @@ -63,13 +63,13 @@ AUXMEMTESTS lda #$44 sta $D17B - jsr .zptoaux + jsr zptoaux sta SET_ALTZP jsr LANGCARDTESTS_NO_CHECK sta RESET_ALTZP - jsr .zpfromaux + jsr zpfromaux lda LCRESULT bne + @@ -374,7 +374,7 @@ AUXMEMTESTS +++ rts ;;; Copy zero page to aux mem. Assumes zp pointing at main mem, and leaves it that way. -.zptoaux +zptoaux ldx #0 - sta RESET_ALTZP lda 0,x @@ -386,7 +386,7 @@ AUXMEMTESTS rts ;;; Copy zero page from aux mem. Assumes zp pointing at main mem, and leaves it that way. -.zpfromaux +zpfromaux ldx #0 - sta SET_ALTZP lda 0,x diff --git a/audit/softswitch.asm b/audit/softswitch.asm new file mode 100644 index 0000000..ae01479 --- /dev/null +++ b/audit/softswitch.asm @@ -0,0 +1,243 @@ +;;; Apple IIe softswitch-reading tests +;;; Copyright © 2017 Zellyn Hunter + +!zone softswitch { + + .resetloc = tmp1 + .setloc = tmp3 + .readloc = tmp5 + .loopcount = tmp0 + .switch = SRC + .testtimes = 8 + +SOFTSWITCHTESTS + lda #1 + sta SOFTSWITCHRESULT + + lda MACHINE + cmp #4 + bcs + + +print + !text "NOT IIE OR IIC:SKIPPING SOFTSWITCH TEST",$8D + +printed + sec + rts + ++ +print + !text "TESTING SOFTSWITCHES",$8D + +printed + + ;; Test write-softswitches + lda #<.writeswitches + sta SRC + lda #>.writeswitches + sta SRC+1 + lda #(.readswitches-.writeswitches)/6 + sta .loopcount + +.wrtloop + ;; Copy reset/set/read locations to .resetloc, .setloc, .readloc + ldy #0 + ldx #0 +- lda (SRC),y + sta .resetloc,x + inc SRC + bne + + inc SRC+1 ++ inx + cpx #6 + bne - + + jsr RESETALL + jsr zptoaux + + ;; Initial RESET + ldy #0 + sta (.resetloc),y + ldx #.testtimes ; test `.testtimes` times +- lda (.readloc),y + bpl + ;ok + ldx #$80 + jsr RESETALL + jsr .fail ++ dex + bne - + + ;; Ensure that reading doesn't do anything. + ldy #0 + lda (.setloc),y + ldx #.testtimes ; test `.testtimes` times +- lda (.readloc),y + bpl + ;ok + ldx #$02 ;TODO: create "LEAVE" fail message + jsr RESETALL + jsr .fail ++ dex + bne - + + ;; Actual SET + ldy #0 + sta (.setloc),y + ldx #.testtimes ; test `.testtimes` times +- lda (.readloc),y + bmi + ;ok + ldx #$82 + jsr RESETALL + jsr .fail ++ dex + bne - + + ;; RESET again + ldy #0 + sta (.resetloc),y + ldx #.testtimes ; test `.testtimes` times +- lda (.readloc),y + bpl + ;ok + ldx #$80 + jsr RESETALL + jsr .fail ++ dex + bne - + + dec .loopcount + bne .wrtloop + + lda #(.endswitches-.readswitches)/6 + sta .loopcount + + +.readloop + ;; Copy reset/set/read locations to .resetloc, .setloc, .readloc + ldy #0 + ldx #0 +- lda (SRC),y + sta .resetloc,x + inc SRC + bne + + inc SRC+1 ++ inx + cpx #6 + bne - + + jsr RESETALL + jsr zptoaux + + ;; Initial RESET + ldy #0 + lda (.resetloc),y + ldx #.testtimes ; test `.testtimes` times +- lda (.readloc),y + bpl + ;ok + ldx #$00 + jsr RESETALL + jsr .fail ++ dex + bne - + + ;; Actual SET + ldy #0 + lda (.setloc),y + ldx #.testtimes ; test `.testtimes` times +- lda (.readloc),y + bmi + ;ok + ldx #$02 + jsr RESETALL + jsr .fail ++ dex + bne - + + ;; RESET again + ldy #0 + lda (.resetloc),y + ldx #.testtimes ; test `.testtimes` times +- lda (.readloc),y + bpl + ;ok + ldx #$00 + jsr RESETALL + jsr .fail ++ dex + bne - + + dec .loopcount + bne .readloop + + +.end + jsr RESETALL + lda SOFTSWITCHRESULT + bne .success + sec + rts +.success + +print + !text "SOFTSWITCH TESTS SUCCEEDED",$8D + +printed + clc + rts + +;;; Print failure message. +;;; High bit of X = write. Low two bits of X: 0 = .resetloc, 2 = .setloc +;;; A = actual value read (which tells what we expected: the opposite) +.fail + sta SCRATCH + txa + bmi + + +print + !text "READ" + +printed + beq ++ ++ +print + !text "WRITE" + +printed +++ +print + !text " AT " + +printed + txa + and #$3 + tax + ldy .resetloc+1,x + lda .resetloc,x + tax + jsr PRNTYX + +print + !text " SHOULD " + +printed + lda SCRATCH + bpl + + +print + !text "RE" + +printed ++ +print + !text "SET " + +printed + ldx .readloc + ldy .readloc+1 + jsr PRNTYX + +print + !text ";GOT $" + +printed + lda SCRATCH + jsr PRBYTE + lda #$8D + jsr COUT + lda #0 + sta SOFTSWITCHRESULT + ldx #1 + rts + +.writeswitches + !word RESET_80STORE, SET_80STORE, READ_80STORE + !word RESET_RAMRD, SET_RAMRD, READ_RAMRD + !word RESET_RAMWRT, SET_RAMWRT, READ_RAMWRT + !word RESET_INTCXROM, SET_INTCXROM, READ_INTCXROM + !word RESET_ALTZP, SET_ALTZP, READ_ALTZP + !word RESET_SLOTC3ROM, SET_SLOTC3ROM, READ_SLOTC3ROM + !word RESET_80COL, SET_80COL, READ_80COL + !word RESET_ALTCHRSET, SET_ALTCHRSET, READ_ALTCHRSET +.readswitches + !word RESET_TEXT, SET_TEXT, READ_TEXT + !word RESET_MIXED, SET_MIXED, READ_MIXED + !word RESET_PAGE2, SET_PAGE2, READ_PAGE2 + !word RESET_HIRES, SET_HIRES, READ_HIRES +.endswitches +} ;softswitch