Skip to content

Instantly share code, notes, and snippets.

@libbkmz
Created May 23, 2012 14:46
Show Gist options
  • Save libbkmz/2775646 to your computer and use it in GitHub Desktop.
Save libbkmz/2775646 to your computer and use it in GitHub Desktop.
# Screen: (00, 00) -> (1F, 09)
#
# Directions:
# 00 - up
# 20 - down
# 40 - left
# 60 - right
# 80 - left up
# A0 - right up
# C0 - left down
# E0 - left up
#
lxi d,0F04 # Paint
lxi h,0800 # Screen start
addr: 1010
# Main {{{
# Draw
call 1420
# Check
call 1100
cc 1050
call 1150
cc 1050
# Clear and calculate
call 1400
addr: 1030
call 1200
# Repeat
jmp 1010
#}}}
addr: 1050
# Request direction {{{
# Save last coords
mov b,d
mov c,e
# Get direction
addr: 1060
mov d,b
mov e,c
in 08
# Write directon
sta 1031
sta 1071
# Refresh coords and check
addr: 1070
call 1200
call 1100
jc 1060
call 1150
jc 1060
# Revert back coords
mov d,b
mov e,c
ret
# }}}
addr: 1100
# Check X bounds @ D {{{
# End of screen
mvi a,1F
stc
cmc
cmp d
jz 1120
jc 1120
# Start of screen
mvi a,00
stc
cmc
cmp d
jz 1120
stc
cmc
ret
# Set overflow flag
addr: 1120
stc
ret
# }}}
addr: 1150
# Check Y bounds @ E {{{
# End of screen
mvi a,09
stc
cmc
cmp e
jz 1170
jc 1170
# Start of screen
mvi a,00
stc
cmc
cmp e
jz 1170
stc
cmc
ret
# Set overflow flag
addr: 1170
stc
ret
# }}}
# Directions
addr: 1200
# Up {{{
dcr e
ret
# }}}
addr: 1220
# Down {{{
inr e
ret
# }}}
addr: 1240
# Left {{{
dcr d
ret
# }}}
addr: 1260
# Right {{{
inr d
ret
# }}}
addr: 1280
# Left Up {{{
dcr d
dcr e
ret
# }}}
addr: 12A0
# Right Up {{{
inr d
dcr e
ret
# }}}
addr: 12C0
# Left Down{{{
dcr d
inr e
ret
# }}}
addr: 12E0
# Right Down {{{
inr d
inr e
ret
# }}}
addr: 12FF
# Stop {{{
hlt
# }}}
# Helpers
addr: 1400
# Clean pixel @ DE {{{
push h
push d
lxi h,0800
call 1440
dad d
mvi m,00
inx h
mvi m,00
pop d
pop h
ret
# }}}
addr: 1420
# Fill pixel @ DE {{{
push h
push d
lxi h,0800
call 1440
dad d
mvi m,00
inx h
mvi m,40
pop d
pop h
ret
# }}}
addr: 1440
# Transform coordinates @ DE{{{
# Mult D x 2
mov a,d
stc
cmc
ral
mov d,a
# Mult E x 2
mov a,e
stc
cmc
ral
mov e,a
# Prepare mult D x 10
push b
push h
push d
lxi b,0009
mov e,d
mvi d,00
mvi h,00
mov l,e
# Start mult D x 10 in cycle
addr: 1460
dcr c
jm 1470
dad d
jmp 1460
# End of mult D x 10
addr: 1470
pop d
mvi d,00
dad d
mov d,h
mov e,l
pop h
pop b
ret
# }}}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment