; SUBROUTINE TO CONVERT SCREEN COORDINATES. ; ENTRY: (DE) = Y,X COORDINATES OF POINT. X = 0 TO 127, Y = 0 TO 47. ; CALL SET ; SETS POINT. ; CALL RESET ; RESETS POINT. ; CALL TEST ; TESTS POINT, RETURNS Z FLAG. ; EXIT: (A THROUGH L) = DESTROYED. ; Z FLAG SET IF TEST. ; .org 0000h SET: LD A, 0C6h ; SET B,(HL) INSTRUCTION. JR TEST10 ; GO TO STORE. RESET: LD A, 86h ; RESET B,(HL) INSTRUCTION. JR TEST10 ; GO TO STORE. TEST: LD A, 46h ; BIT B,(HL) INSTRUCTION. TEST10: LD (INST +1),A ; STORE SECOND BYTE. ADDRES: LD A, D ; GET Y. LD B, 0FFh ; -1. LOOP: INC B ; SUCCESSIVE SUBTRACTS FOR DIVISION BY 3. SUB 3 JP P, LOOP ; GO IF NOT MINUS. ADD A, 3 ; YQ IN B, YR IN A. SLA A ; YR *2. LD C, A ; SAVE YR * 2. LD L, B ; YQ TO L. LD H, 0 ; YQ IN HL. LD B, 6 ; COUNT FOR MULTIPLY BY 64. LOOP1: ADD HL, HL ; YQ * 2. DJNZ LOOP1 ; GO IF NOT YQ * 64. LD D, 0 ; DE NOW HAS X. SRL E ; XQ. JR NC, CONT ; GO IF XR NOT EQUAL TO 1. INC C ; C NOW HAS YR * 2 + XR. CONT: ADD HL, DE ; HL NOW HAS YQ * 2 + XQ. LD DE, 3C00h ; START OF DISPLAY. ADD HL, DE ; HL NOW HAS DISPLACEMENT. SLA C ; ALIGHT TO FIELD. SLA C SLA C LD A, (INST +1) ; GET INSTRUCTION. ADD A, C ; SET FIELD. LD (INST +1),A ; STORE. INST: .DB 0CBh ; PERFORM BIT, SET, RESET. .DB 0 ; WILL BE FILLED IN. SET 7, (HL) ; FOR GRAPHICS RET .END