************************************************************ * V9958-S v1.00.04/02/91 V9958 SYSTEM TESTER PROGRAM! * ************************************************************ TITL 'V9958 SYSTEM TESTER! by Gary Bowser' IDT '1.0v9958' DEF SFIRST,START,SLAST AORG >6000 STARTING ADDRESS OF THE MODULE SPACE DATA >AA58 000 >AA = Valid DSR >58 = V9958 DATA >0000 002 (for future expansion) DATA >0000 004 (no power-up's) AORG >6006 STARTING ADDRESS FOR RAG LINKER 3 OUTPUT SFIRST DATA PROG 006 Address of program name table! DATA >0000 008 (no high level DSR's) DATA >0000 00A (no low level DSR's or CALL's) DATA >0000 00C (no interrupt's) DATA >0000 00E (no BASIC library's) PROG DATA >0000 No more programs in this chain DATA START Address to start program at! BYTE 19 Length byte & program name!! TEXT 'V9958 SYSTEM TESTER' EVEN ************************************************************* *0=Temp,X1 DEMOWS|8 =Changer Y2 * *1=Temp,Y1 |9 =Page shift control * *2=Temp,X2 |10=Count from 4 to 1,temp * *3=Temo,Y2 |11=Return address for BL'S,Temp * *4=Line Color |12=XY pointer * *5=Changer X1 DEMOWS+10|13=XY changer pointer * *6=Changer Y1 |14=Edge pointer * *7=Changer X2 |15=Temp,RNDNO * ************************************************************* EXIT BLWP @0 START LIMI 0 LWPI DEMOWS LI R0,LOADWS LI R1,CMDWS LI R2,32 START1 MOV *R0+,*R1+ DECT R2 JNE START1 LI R0,>0700 BLWP @VWTR LI R0,>080A BLWP @VWTR LI R0,7 LI R1,>3F80 LI R4,>00FF LI R9,>0001 BLWP @VMODE NXTART BLWP @KSCAN MOVB @KEYVAL,R0 CB R0,@QUIT JEQ EXIT CB R0,@ZERO JLT NOKEY CB R0,@SEVEN JGT NOKEY LI R1,>8000 SRL R0,8 AI R0,-48 JEQ NOSHFT SRL R1,0 NOSHFT LI R0,>0009 MOVB @R9CTRL,R0 XOR R1,R0 MOVB R0,@R9CTRL SWPB R0 BLWP @VWTR NOKEY BLWP @KSCAN MOVB @KEYVAL,R0 JGT NOKEY SWPB R9 LI R0,>023F MOVB R9,R9 JEQ GOART LI R0,>021F GOART BLWP @VWTR Switch to the right page MOV R4,R5 CLR R0 Start clear at top-left X corner CLR R1 Start clear at top-left Y corner LI R2,>00FF 256 wide clear for G7 mode LI R3,>00D3 End clear at bottom-right corner CLR R4 Fill box with backdrop color AB R9,R1 Point to odd page AB R9,R3 Point to odd page BLWP @BOX Do a shifted clear MOV R5,R4 LI R12,DEMOWS LI R13,DEMOWS+10 LI R14,EDGE LI R10,4 AA LI R15,28645 MPY @SEED,R15 MOV @RNDNUM,R15 AI R15,31417 MOV R15,@SEED SRL R15,7 0-511 C R15,*R14 Check if pass the edge JGT AA Yep, so get a lower value MOV R15,*R12 Save this starting XY value AB LI R15,28645 MPY @SEED,R15 MOV @RNDNUM,R15 AI R15,31417 MOV R15,@SEED SRL R15,12 0-15 CI R15,9 JGT AB JLT AC LI R15,6 AC CI R15,8 JNE AD LI R15,3 AD MOV R15,*R13 LI R15,28645 MPY @SEED,R15 MOV @RNDNUM,R15 AI R15,31417 MOV R15,@SEED SRL R15,15 0-1 JEQ AE NEG *R13 AE INCT R12 INCT R13 INCT R14 DEC R10 JGT AA LI R15,28645 MPY @SEED,R15 MOV @RNDNUM,R15 AI R15,31417 MOV R15,@SEED SRL R15,8 AI R15,63 63-319 MOV R15,@NUMLIN LI R15,28645 MPY @SEED,R15 MOV @RNDNUM,R15 AI R15,31417 MOV R15,@SEED SRL R15,14 0-3 MOV R15,@SART1 LI R15,28645 MPY @SEED,R15 MOV @RNDNUM,R15 AI R15,31417 MOV R15,@SEED LI R11,NXTART SRL R15,14 0-3 JEQ BC BA LI R12,DEMOWS LI R13,DEMOWS+10 LI R14,EDGE LI R10,4 CAL1S A *R13,*R12 C *R12,*R14 JLE CAL1E NEG *R13 C @SART1,@ONE JLT CAL1S CAL1N LI R15,28645 MPY @SEED,R15 MOV @RNDNUM,R15 AI R15,31417 MOV R15,@SEED SRL R15,8 CI R15,5 JL CAL1N MOV R15,R4 JMP CAL1S CAL1E INCT R12 INCT R13 INCT R14 DEC R10 JGT CAL1S AB R9,R1 Point to odd page AB R9,R3 Point to odd page BLWP @LINE Do a shifted plot SB R9,R1 Point to even page SB R9,R3 Point to even page DEC @NUMLIN Count down the lines ploted JGT BA RT BC CLR @STOPS BD LI R12,DEMOWS LI R13,DEMOWS+10 LI R14,EDGE LI R10,4 MOV @STOPS,R15 JGT BF LI R15,28645 MPY @SEED,R15 MOV @RNDNUM,R15 AI R15,31417 MOV R15,@SEED SRL R15,14 INC R15 MOV R15,@DONT LI R15,28645 MPY @SEED,R15 MOV @RNDNUM,R15 AI R15,31417 MOV R15,@SEED SRL R15,15 JEQ BE LI R15,7 JMP BE1 BE LI R15,14 BE1 MOV R15,@STOPS BF C R10,@DONT JEQ CA CAL2S A *R13,*R12 C *R12,*R14 JLE CAL2E NEG *R13 C @SART1,@ONE JLT CAL2S CAL2N LI R15,28645 MPY @SEED,R15 MOV @RNDNUM,R15 AI R15,31417 MOV R15,@SEED SRL R15,8 CI R15,5 JL CAL2N MOV R15,R4 JMP CAL2S CA DEC @STOPS CAL2E INCT R12 INCT R13 INCT R14 DEC R10 CB JGT BF AB R9,R1 Point to odd page AB R9,R3 Point to odd page BLWP @LINE Do a shifted plot SB R9,R1 Point to even page SB R9,R3 Point to even page DEC @NUMLIN Count down the lines ploted JGT BD RT ONE DATA 1 FOUR DATA 4 EDGE DATA 255,211,255,211 Edge X1,Y1 ; X2;Y2 for G7 modes QUIT BYTE >05 ZERO TEXT '0' SEVEN TEXT '7' EVEN SCAN EQU >000E DEMOWS EQU >8300 RNDNUM EQU >8320 STOPS EQU >8322 DONT EQU >8324 SART1 EQU >8326 NUMLIN EQU >8328 R9CTRL EQU >832A CMDWS EQU >8330 KEYVAL EQU >8375 SEED EQU >83C0 VDPR1 EQU >83D4 GPLWS EQU >83E0 VDPRD EQU >8800 READ PORT #0 Read data VDPSTA EQU >8802 READ PORT #1 Read status VDPWD EQU >8C00 WRITE PORT #0 Write data VDPWA EQU >8C02 WRITE PORT #1 Write address VDPWP EQU >8C04 WRITE PORT #2 Write pallete VDPWC EQU >8C06 WRITE PORT #3 Write control ***************************** * BOX BLWP * * * * R0 - Top-Left X1 r1* * R1 - Top-Left Y1 r2* * R2 - Bottom-Right X2 r3* * R3 - Bottom-Right Y2 r4* * R4 - Color r5* ***************************** BOX DATA CMDWS,BOX1 Command workspace / Entry BOX1 MOV R13,R0 Get old workspace pointer MOV *R0+,R1 Fetch X1 (top-left) MOV *R0+,R2 Fetch Y1 (top-left) MOV *R0+,R3 Fetch X2 (bottom-right) MOV *R0+,R4 Fetch Y2 (bottom-right) MOV *R0+,R5 CLR CLR R8 ARG MOV R3,R6 COPY (X2) TO R6 MOV R4,R7 COPY (Y2) TO R7 S R1,R6 JEQ BOX3 ABS R6 R6 = ABS(X2-X1) JGT BOX2 right ORI R8,>0004 LEFT BOX2 INC R6 BOX3 S R2,R7 JEQ BOX5 ABS R7 R7 = ABS(Y2-Y1) JGT BOX4 down ORI R8,>0008 UP BOX4 INC R7 BOX5 BL @CMDEXE EXECUTE A VDP COMMAND DATA >C000 !TEMP! Data for DRAW BOX (WAS >8000) RTWP RETURN TO THE CALLING PROGRAM ***************************** * LINE BLWP * * * * R0 - Start X1 r1* * R1 - Start Y1 r2* * R2 - End X2 r3* * R3 - End Y2 r4* * R4 - Color r5* ***************************** LINE DATA CMDWS,LINE1 LINE1 MOV R13,R0 MOV *R0+,R1 MOV *R0+,R2 MOV *R0+,R3 MOV *R0+,R4 MOV *R0+,R5 INC R3 INC R4 CLR R8 MOV R3,R6 MOV R4,R7 S R1,R6 ABS R6 JGT LINE3 ORI R8,>0004 LINE3 S R2,R7 ABS R7 JGT LINE4 ORI R8,>0008 LINE4 C R6,R7 JGT LINE5 ORI R8,>0001 MOV R6,R0 MOV R7,R6 MOV R0,R7 LINE5 BL @CMDEXE EXECUTE A VDP COMMAND DATA >7000 Data for DRAW LINE RTWP ***************************** * VMODE BLWP * * * * R0 - MC, Gs 1-7 , T1,T2 r1* * R1 - VDP R2/R9 settings * ***************************** VMODE DATA CMDWS,VMODE1 VMODE1 MOVB @VRSTA2+1,*R10 SET STATUS #2 ON MOVB @VRSTA2,*R10 NOP VMODE2 MOVB *R9,R0 Read S2 ANDI R0,>0100 Check if command done? JNE VMODE2 If not,wait until so MOVB @VRSTA0+1,*R10 SET STATUS #0 ON MOVB @VRSTA0,*R10 MOV *R13,R1 Get Graphics mode (R0) MOVB @VM$R0+1,*R10 R17 == R0 MOVB @VM$R0,*R10 SLA R1,1 MOVB @VMTBL(R1),*R12 Get R0 value for selected mode MOVB @VMTBL+1(R1),*R12 Get R1 value for selected mode MOVB @VMTBL+1(R1),@VDPR1 MOVB @1*2(R13),*R12 Get R2 value for selected mode MOVB @1*2+1(R13),*R10 Get R9 value for selected mode MOVB @1*2+1(R13),@R9CTRL ************************** MOVB @VM$R9,*R10 Store R9 RTWP MC G1 G2 G3 G4 G5 G6 G7 VMTBL DATA >006B,>0063,>0263,>0463,>0663,>0863,>0A63,>0E63 DATA >0073,>0473 <--- T1,T2 VM$R0 DATA >9100 R17 == R0 VRSTA0 DATA >8F00 S0 9918 Status VRSTA2 DATA >8F02 S2 9938 Status #2 VM$R9 DATA >8900 R9 9938 Set R9 data CMDR36 DATA >9124 R17 == R36 LOADWS BSS 18 R0-R8 COMMAND WORKSPACE DATA VDPSTA R9 Video Read Port #2 address DATA VDPWA R10 Video Write Port #1 address DATA >0000 R11 BL RETURN DATA DATA VDPWC R12 Video Write Port #3 address BSS 6 R13-R15 BLWP RETURN DATA ***************************** * Execute/setup a command * ***************************** CMDEXE MOVB @VRSTA2+1,*R10 R15 == S2 MOVB @VRSTA2,*R10 NOP CMDEXF MOVB *R9,R0 Check Status ANDI R0,>0100 Last Command Done? JNE CMDEXF No, then wait until so MOVB @VRSTA0+1,*R10 R15 == S0 MOVB @VRSTA0,*R10 MOVB @CMDR36+1,*R10 R17 == R36 MOVB @CMDR36,*R10 NOP MOVB @1*2+1+CMDWS,*R12 R36 MOVB R1,*R12 R37 MOVB @2*2+1+CMDWS,*R12 R38 MOVB R2,*R12 R39 MOVB @6*2+1+CMDWS,*R12 R40 MOVB R6,*R12 R41 MOVB @7*2+1+CMDWS,*R12 R42 MOVB R7,*R12 R43 MOVB @5*2+1+CMDWS,*R12 R44 MOVB @8*2+1+CMDWS,*R12 R45 MOVB *R11+,*R12 R46 INC R11 RT ********************************* * VWTR = Video Write to Register* ********************************* VWTR DATA CMDWS,VWTR1 VWTR1 MOV *R13,R0 MOVB @CMDWS+1,@VDPWA ORI R0,>8000 MOVB R0,@VDPWA RTWP ********************************* * KSCAN = Keyboard SCAN * ********************************* KSCAN DATA CMDWS,KSCAN1 KSCAN1 LWPI GPLWS MOV R11,@CMDWS+22 BL @SCAN MOV @CMDWS+22,R11 LWPI CMDWS RTWP SLAST END