Listing of file='BLOCK.MAC;02' on disk='vmedia/sound_light_pen-sector.ccvf'
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; BLOCK - DRAW A BLOCK ON THE SCREEN ; ; VALUES ON ENTRY: ; ; B,C = X,Y SCREEN CO-ORDS ; (COORDS ARE 0-63 FOR X AND 0-31 FOR Y, ; BUT OFF-SCREEN VALUES ARE HANDLED OK) ; D,E = FILL CHARACTER, COMPOSITE COLOR CODE ; H,L = WIDTH (BYTES INC. COMPOSITE COLOR CODE), ; HEIGHT (NO. OF LINES) ; ; ALL REGISTERS DESTROYED ; EXTRN XYADDR LPS EQU 32 ;LINES PER SCREEN CPL EQU 64 ;CHARACTERS PER LINE BPL EQU 128 ;BYTES PER LINE ENTRY BLOCK BLOCK: MOV A,B ; ... STORE ALL THE NEEDED INFO STA XCOORD SHLD HEIGHT XCHG SHLD CCI XCHG CALL XYADDR ;GET ADDRESS IN REFRESH RAM PUSH H SHLD CRTRAM LDA HEIGHT MOV L,A DRWS1: MOV A,C ;GO THROUGH EACH LINE OF THE FIGURE ORA A JP DRWS2 JMP DRWEND DRWS2: CPI LPS ;SEE IF OFF BOTTOM OF SCREEN JNC FIN ;AND RETURN IF TRUE LDA WIDTH ;OTHERWISE LOOK AT X-COORD RRC ;DIVIDE BY TWO ANI 7FH MOV H,A LDA XCOORD MOV B,A DRWS3: MOV A,B ;CHECK X-COORD FOR EACH CHARACTER ORA A JP DRWS6 DRWS4: XTHL ;OFF SCREEN TO LEFT, INCREMENT INX H INX H XTHL DRWS5: INR B ;UPDATE X-COORD DCR H ;SEE IF THIS LINE OF FIGURE FINISHED JNZ DRWS3 JMP DRWEND DRWS6: CPI CPL ;CHECK FOR OFF SCREEN TO RIGHT ... JNC DRWEND XTHL ;... IF NOT, MOVE BYTE TO REFRESH RAM. DRWS7: LDA CHR MOV M,A ;MOVE THE CHARACTER INX H LDA CCI ;COMPOSITE COLOR CODE TOO MOV M,A DRWS8: INX H XTHL JMP DRWS5 DRWEND: INR C ;GO TO NEXT LINE OF FIGURE DCR L JZ FIN ;RETURN IF NONE LEFT XTHL LHLD CRTRAM ;UPDATE REFRESH RAM ADDRESS PUSH D LXI D,BPL DAD D POP D SHLD CRTRAM XTHL JMP DRWS1 ;REPEAT FOR THIS LINE FIN: POP H ;HL IS STARTING ADDRESS IN REFRESH RAM RET ; ; TEMPORARY STORAGE AREA ; CCI: DB 0 ;COMPOSITE COLOR CODE TO USE CHR: DB ' ' ;FILL CHARACTER XCOORD: DS 1 ;STARTING X-COORD OF FIGURE HEIGHT: DB 3 ;NUMBER OF LINES IN FIGURE WIDTH: DB 3 ;NUMBER OF BYTES IN FIGURE CRTRAM: DS 2 ;ADDRESS IN REFRESH RAM END