;GRF200.DO updated 2/6/2004 ;GRF201.DO = v0.0 src code T200 7/25/91 ;GRF v0.0 (c) 11/14/90 RHP ;for T200, adapted from GRAFIX.CO ;for M100 (c) RHPigford ;for use with SKT200.BA (SKETCH.BA) ; T200 M100 ; ---- ---- CURSON: EQU 20328 ;4249H ESC "P" CUROFF: EQU 20333 ;424EH ESC "Q" TOPRT: EQU 33993 ;6D3FH A to LPT PLOT: EQU 36214 ;744CH pixel on UNPLOT: EQU 36215 ;744DH pixel off POSIT: EQU 20379 ;427CH H=col,L=row LCD: EQU 23045 ;4B44H A to LCD, ret KYREAD: EQU 35587 ;7242H INKEY$ CAPS: EQU 4115 ;0FE8H 2/89 P100 pg22 BEEP: EQU 20293 ;4229H ruins BC PUTTXT: EQU 28155 ;11A2H to LCD pointed ;to by HL, ended by 0 ERAEOL: EQU 20348 ;425DH Opndl pg225 CURVAL: EQU 64864 ;65516 ? ;--[ start MENU loop ]----------------- ORG 56300 ;=61103-(880+3840) START: JMP MENU GF: DW START PF: DW PRFLAG BS: DW BUFFER BE: DW END FZ: DW FILLCD MENU: MVI A,1 STA PRFLAG LXI H,0110H ;row 01D,col 16D CALL GETROW MENU1: CALL CLR16 LXI H,MSG1 CALL PUTTXT MENU2: CALL GETKY CALL CAPS CPI 'P' JZ PSXY CPI 'S' JZ FILBUF CPI 'Q' JZ MENU3 JMP MENU2 MENU3: CALL RSL1P MVI E,120 CALL PUTROW RET ;end Menu MSG1: DB 27,'pGRF200',27,'q',' ',171, DB 'RHP

rint ' DB 'ave ..uit',0 ;LCD to BUFFER ;save when ret SKETCH ;if so,PRFLAG=0 FILBUF: CALL RSL1P MVI E,120 CALL PUTROW XRA A ;A=0 STA PRFLAG ;pntr=0 for RAM LXI H,0101H JMP SCNROW ;=called only from BASIC ;fill LCD w/vals from .CO file ;pointed to by SKETCH FILLCD: SHLD L1PNTR MVI A,5 STA PRFLAG LXI D,1100H ;16d=10h FILLC1: DCR D RZ ;to basic PUSH D CALL PUTROW LXI D,240 LHLD L1PNTR DAD D SHLD L1PNTR POP D MOV A,E ADI 8 MOV E,A JMP FILLC1 ;= GETKY: ORA A ;clear carry CALL KYREAD JZ GETKY CALL CAPS RET ;= CLR16: LXI H,0110H ;16d=10h CALL POSIT CALL ERAEOL RET ;= ; PSXY (c)1989 RHP ; Store val from last row, send prompt. PSXY: CALL CLR16 LXI H,HGTMSG CALL PUTTXT ;height PSXYH: CALL GETKY CPI '1' JM PSXYH CPI '3' JZ PSXYH CPI '5' JP PSXYH SUI 30H STA PRFLAG CALL CLR16 LXI H,PRTMSG ;width CALL PUTTXT PSXYW: CALL GETKY CPI '1' JM PSXYW CPI '5' JP PSXYW SUI 30H ; make readable STA PRWIDE CALL SETMD CALL RSL1P MVI E,120 CALL PUTROW LXI H,0101H CALL LNSPC JC FINISH ;BRK? ;-print LOOP SCNROW: CALL GETROW PUSH H LDA PRFLAG ANA A ;A=0? JZ ENDROW CPI 01H JZ PR1HI ;1-1=0 CPI 02H JZ PR2HI CPI 04H JZ PR4HI ENDROW: POP H NXTROW: INR L MVI A,11H ;17d=11h CMP L JZ FINISH MVI H,01H JMP SCNROW ;= msgs HGTMSG: DB 'Prt HEIGHT multiple? ' DB '<1,2,4>',0 PRTMSG: DB 'Prt WIDTH multiple? ' DB '<1,2,3,4>',0 ;= SETMD sets GMODE,N1,N2 SETMD: LDA PRWIDE MOV B,A LXI D,BASE LXI H,TABLE SETMD1: MOV A,M CMP B JZ FOUND DAD D JMP SETMD1 BASE: EQU 0003D FOUND: INX H MOV A,M STA N1 INX H MOV A,M STA N2 RET PRFLAG: DB 1 PRWIDE: DB 1 N1: DS 1 N2: DS 1 TABLE: DB 1,240,0,2,224,1 DB 3,208,2,4,192,3 ;====== ; PR1HI dump 240 BUFFER values PR1HI: CALL GMODE MVI E,240 LXI H,BUFFER PR1HI1: MOV A,M CALL PRNTIT JC BRKOUT INX H DCR E JNZ PR1HI1 CALL PCRLF JMP ENDROW ;======= ; PR2HI tests BUFFER builds new bytes PR2HI: MVI B,2 MVI D,10000000B PR2HI1: CALL GMODE MVI E,240 LXI H,BUFFER PR2HI2: MVI C,0 MOV A,M ANA D CNZ T2BITS MOV A,D RRC MOV D,A MOV A,M ANA D CNZ U2BITS MOV A,D RRC MOV D,A MOV A,M ANA D CNZ L2BITS MOV A,D RRC MOV D,A MOV A,M ANA D CNZ B2BITS MOV A,D RLC RLC RLC MOV D,A MOV A,C CALL PRNTIT JC BRKOUT INX H DCR E JNZ PR2HI2 CALL PCRLF MVI D,00001000B DCR B JNZ PR2HI1 JMP ENDROW T2BITS: MOV A,C ORI 11000000B MOV C,A RET U2BITS: MOV A,C ORI 00110000B MOV C,A RET L2BITS: MOV A,C ORI 00001100B MOV C,A RET B2BITS: MOV A,C ORI 00000011B MOV C,A RET ;= PR4HI tests BUFFER print 4 rows x2 PR4HI: MVI B,04 MVI D,10000000B NXTPAS: CALL GMODE MVI E,240 LXI H,BUFFER NXTVAL: MVI C,0 MOV A,M ANA D CNZ T4BITS MOV A,D RRC MOV D,A MOV A,M ANA D CNZ B4BITS MOV A,D RLC MOV D,A MOV A,C CALL PRNTIT JC BRKOUT INX H DCR E JNZ NXTVAL CALL PCRLF MOV A,D RRC RRC MOV D,A DCR B JNZ NXTPAS JMP ENDROW T4BITS: MOV A,C ORI 11110000B MOV C,A RET B4BITS: MOV A,C ORI 00001111B MOV C,A RET ;==== store row graphic vals GETROW: CALL RSL1P CALL CURSON NXTCOL: CALL POSIT PUSH PSW CALL TIMER POP PSW PUSH H CALL TWSTCR POP H INR H MVI A,41 CMP H JNZ NXTCOL CALL CUROFF RET ;PUTROW puts the graphics back by pixs ; assumes E = start row (0-120) for 16 ; rows of pixels PUTROW: MVI B,10000000B MVI C,0 NXTY: MVI D,0 LHLD L1PNTR INR C MOV A,C CPI 9 RZ BYTE: PUSH H MOV A,M ANA B PUSH D PUSH B JNZ PSET JZ PRESET BACK: POP B POP D POP H INX H INR D MOV A,D CPI 240 JNZ BYTE MOV A,B RRC MOV B,A INR E JMP NXTY PSET: CALL PLOT JMP BACK PRESET: CALL UNPLOT JMP BACK ;= read 6 curs vls,store TWSTCR: LXI H,CBUF SHLD CBPNTR MVI B,00000001B MVI D,6 NX_BUF: LHLD CBPNTR XRA A ;A=0 MOV M,A ;clear RAM addr MVI E,8 MVI C,10000000B LXI H,CURVAL-1 NX_CUR: INX H MOV A,M ;get orig val ANA B ;is this pix on? JZ BYPASS PUSH H LHLD CBPNTR MOV A,M ;get the CBUF val ORA C ;add a corresp.bit MOV M,A POP H BYPASS: MOV A,C RRC ;rot to next bit MOV C,A DCR E JNZ NX_CUR LHLD CBPNTR MOV A,M ;get new byte CMA ;reverse video LHLD L1PNTR MOV M,A ;save it where L1PNTR ;points INX H SHLD L1PNTR LHLD CBPNTR INX H SHLD CBPNTR MOV A,B RLC ;rot to next build bit MOV B,A DCR D ;last byte? JNZ NX_BUF RET CBPNTR: DS 2 CBUF: DS 6 ;= sends 24/144 spacing LNSPC: MVI A,27 CALL TOPRT MVI A,51 CALL TOPRT MVI A,24 CALL TOPRT RET ;= refresh Graphics GMODE: MVI A,27 CALL TOPRT MVI A,76 CALL TOPRT LDA N1 CALL TOPRT LDA N2 CALL TOPRT RET ;= reset prt out of graphics RSTPRT: MVI A,27 CALL TOPRT MVI A,50 CALL TOPRT RET ;= send CR+LF PCRLF: MVI A,13 CALL TOPRT MVI A,10 CALL TOPRT ; NOP ; NOP ; NOP ; NOP ; NOP RET ;= send to prt PRNTIT: ANA A ;carry=0 PUSH B PUSH H LXI H,PRWIDE MOV B,M POP H PRNTI1: CALL TOPRT DCR B JZ PRNTI2 JMP PRNTI1 PRNTI2: POP B RET ;= time to illuminate TIMER: MVI A,200 TIME?: NOP NOP NOP NOP NOP DCR A RZ JMP TIME? BRKOUT: POP H ;if BRK from GMODE CALL BEEP CALL BEEP JMP MENU FINISH: LDA PRFLAG ANA A JZ BEEP2 ;if save is active CALL RSTPRT BEEP1: CALL BEEP CALL CUROFF JMP MENU BEEP2: CALL BEEP CALL BEEP RET ;= reset mem pointer RSL1P: PUSH H LDA PRFLAG ANA A JZ RSL11 LXI H,BUFFER SHLD L1PNTR RSL11: POP H RET L1PNTR: DS 2 BUFFER: DS 3840 END: END