Prev: 64859 Up: Map Next: 64991
64927: FREEHAND routine
FREEHAND_ROUTINE 64927 CALL SET_INVERSE_AND_OVER Set inverse and over bits
64930 LD BC,(23677) Get current co-ordinates
64934 LD A,(IX+0) A=graphics instruction
64937 RRCA
64938 RRCA
64939 RRCA
64940 RRCA Rotate top 4 bits to bottom 4 bits
64941 AND 14 Clear bits 0 and 4-7
64943 LD L,A L=0,2,4,6,8,10,12,14
64944 LD H,0
64946 LD DE,64991 DE=lookup table
64949 ADD HL,DE Use L to get offset in lookup table
64950 LD E,(HL) E=Y offset
64951 INC HL
64952 LD A,(HL) A=X offset
64953 ADD A,C Add current X-co-ordinate to A
64954 LD C,A C=new X co-ordinate
64955 INC B Increment y co-ordinate by 1
64956 BIT 0,E Is Y offset=1 or -1?
64958 JR Z,FREEHAND_ROUTINE_0 If not, it must be zero, jump forward to decrement it to what it was
64960 BIT 7,E Is Y offset=-1?
64962 JR Z,FREEHAND_ROUTINE_1 If not, it must be one, jump forward to boundary check
64964 DEC B Decrement x co-ordinate back to what it was
64965 JR NZ,FREEHAND_ROUTINE_0 If B is non-zero, decrement it
64967 LD B,176 If B is zero, set it to 176 (and then it will decrement to 175)
FREEHAND_ROUTINE_0 64969 DEC B Decrement y co-ordinate by 1
FREEHAND_ROUTINE_1 64970 LD A,176
64972 CP B Is B=176?
64973 JR NZ,FREEHAND_ROUTINE_2 If not, skip to plot
64975 LD B,0 If so, set B to 0 (175 is highest Y co-ordinate)
FREEHAND_ROUTINE_2 64977 CALL 8933 'Plot' routine
64980 RES 0,(IY+87)
64984 RES 2,(IY+87)
64988 JP SKIP_1_THEN_NEXT Ahead one byte and process next graphics instruction
Prev: 64859 Up: Map Next: 64991