106 lines
3.4 KiB
Python
106 lines
3.4 KiB
Python
# -*- coding: utf-8 -*-
|
|
#-----------------------------------------------------------------------
|
|
#
|
|
# Racer-specific SYS extensions
|
|
#
|
|
#-----------------------------------------------------------------------
|
|
from __future__ import (
|
|
absolute_import,
|
|
division,
|
|
print_function,
|
|
unicode_literals,
|
|
)
|
|
|
|
from asm import *
|
|
|
|
# Peek into the ROM's symbol table
|
|
sysArgs = symbol('sysArgs0')
|
|
vTmp = symbol('vTmp')
|
|
vPC = symbol('vPC')
|
|
vAC = symbol('vAC')
|
|
|
|
#-----------------------------------------------------------------------
|
|
# SYS_RacerUpdateVideoX_40
|
|
#-----------------------------------------------------------------------
|
|
|
|
# Updates the odd videoTable entries for rendering the road curvature.
|
|
# This SYS call self-repeats for a total of 47 times and is equivalent to:
|
|
# [do
|
|
# q, X- p. p 4- p=
|
|
# q, X= q<++
|
|
# q<, if<>0loop]
|
|
#
|
|
|
|
label('SYS_RacerUpdateVideoX_40')
|
|
ld([sysArgs+2],X) #15 q,
|
|
ld([sysArgs+3],Y) #16
|
|
ld([Y,X]) #17
|
|
st([vTmp]) #18
|
|
suba([sysArgs+4]) #19 X-
|
|
ld([sysArgs+0],X) #20 p.
|
|
ld([sysArgs+1],Y) #21
|
|
st([Y,X]) #22
|
|
ld([sysArgs+0]) #23 p 4- p=
|
|
suba(4) #24
|
|
st([sysArgs+0]) #25
|
|
ld([vTmp]) #26 q,
|
|
st([sysArgs+4]) #27 X=
|
|
ld([sysArgs+2]) #28 <q++
|
|
adda(1) #29
|
|
st([sysArgs+2]) #30
|
|
bne('.sysRacer0') #31 Self-repeat by adjusting vPC
|
|
ld([vPC]) #32
|
|
bra('.sysRacer1') #33
|
|
nop() #34
|
|
label('.sysRacer0')
|
|
suba(2) #33
|
|
st([vPC]) #34
|
|
label('.sysRacer1')
|
|
ld(hi('REENTER'),Y) #35
|
|
jmp(Y,'REENTER') #36
|
|
ld(-40//2) #37
|
|
|
|
#-----------------------------------------------------------------------
|
|
# SYS_RacerUpdateVideoY_40
|
|
#-----------------------------------------------------------------------
|
|
|
|
# Updates an even videoTable entry for rendering grass and curbstone color.
|
|
# Native Gigatron accelaration for inner loop body:
|
|
#
|
|
# 8& [if<>0 1] tmp=
|
|
# SegmentY 254& tmp+ p.
|
|
# p<++ p<++
|
|
# SegmentY<++
|
|
# p<, 238^
|
|
|
|
label('SYS_RacerUpdateVideoY_40')
|
|
ld([sysArgs+3]) #15 8&
|
|
anda(8) #16
|
|
bne(pc()+3) #17 [if<>0 1]
|
|
bra(pc()+3) #18
|
|
ld(0) #19
|
|
ld(1) #19(!)
|
|
st([vTmp]) #20 tmp=
|
|
ld([sysArgs+1],Y) #21
|
|
ld([sysArgs+0]) #22 <p++ <p++
|
|
adda(2) #23
|
|
st([sysArgs+0],X) #24
|
|
xora(238) #25 238^
|
|
st([vAC]) #26
|
|
st([vAC+1]) #27
|
|
ld([sysArgs+2]) #28 SegmentY
|
|
anda(254) #29 254&
|
|
adda([vTmp]) #30 tmp+
|
|
st([Y,X]) #31
|
|
ld([sysArgs+2]) #32 <SegmentY++
|
|
adda(1) #33
|
|
st([sysArgs+2]) #34
|
|
ld(hi('REENTER'),Y) #35
|
|
jmp(Y,'REENTER') #36
|
|
ld(-40//2) #37
|
|
|
|
#-----------------------------------------------------------------------
|
|
#
|
|
#-----------------------------------------------------------------------
|
|
|