1
0
mirror of https://github.com/g012/l65.git synced 2024-06-02 12:41:28 +00:00
l65/asm.lua

154 lines
4.6 KiB
Lua

dofile "vcs.lua"
TIM_OVERSCAN = 50 -- TIM64T, 3200 cycles = ~ 42 scanlines
TIM_VBLANK = 61 -- TIM64T, 3904 cycles = ~ 51 scanlines
TIM_KERNEL = 17 -- T1024T, 17408 cycles = ~229 scanlines
location(0xf000, 0xffff)
if toto ~= 15 then end
abc = 13 ~ 0x7
xyz = 1 << 2
x:f()
::lualabel::
;
lda = 5 if lda < 6 then print('yep') end
;
--[[
local function ptr_table(label, ...)
local vals = {...}
section(label .. "_lo")
for _,v in ipairs(vals) do byte_lo(v) end
section(label .. "_hi")
for _,v in ipairs(vals) do byte_hi(v) end
end
]]
--@@message byte(4) "test" byte(0)
section(function(o) return o+("data") end)
do crosspage()
byte(1, 2) byte(3, 4) endpage()
end
word(0xf080) byte(16, 3, 4, 5, 6,
24, 32)
--[[
word(message)
byte_lo(message) byte_hi(message)
--]]
byte(function() return message&0xff end, function() return message>>8 end)
--[[
ptr_table("ptrs", message, data, 0)
--]]
--section{ "toto", align = 256, offset = 16 }
--section{ "toto", org = 0xf100 }
--section "waitForIntim"
section(function(o) return o+("waitForIntim") end) --alt short syntax when no other option
-- n_{ a=INTIM } ?
--lda(INTIM) -- or a=INTIM
--bne "waitForIntim"
ldx_immediate (function(o) return o+(0xf0) end)
ldx_immediate (function(o) return o+(13) end)
ldy_immediate (function(o) return o+(0xAB - 16 + 27 & 3 | 6 ~ 0xf >> ~3 << 1 // 5) end)
lda_absolute(function(o) return o+( data) end)
lda_absolute(function(o) return o+( data) end,5)
lda_absolute_x(function(o) return o+( data) end,5)
lda_absolute_y(function(o) return o+( data) end,5)
lda_absolute(function(o) return o+( data+3) end,12)
lda_absolute_x(function(o) return o+( data+3) end,12)
lda_absolute_y(function(o) return o+( data+3) end,12)
lda_indirect_x (function(o) return o+(INTIM) end,5)
lda_indirect_x (function(o) return o+(INTIM) end,function(a) return a+2 end)
lda_indirect_y (function(o) return o+(INTIM) end,5)
lda_indirect_y (function(o) return o+(INTIM) end,function(a) return a+2 end)
jmp_indirect (function(o) return o+(INTIM) end)
jmp_indirect (function(o) return o+(INTIM) end,12)
jmp_indirect (function(o) return o+(INTIM) end,function(a) return a-4 end)
lda_absolute( function(c) return data * c end, v)
lda_absolute( function(c) return data*c end, v)
local f = function(c) return data*c end v=5 lda_absolute(f,v) v=12 lda_absolute(f,v)
local g = function() return function(c) return data * c end end
lda_absolute(g(),v)
lda_absolute( f,v)
lda_absolute_x (function(o) return o+(_toto+15) end,16)
lda_immediate (15)
do samepage()
lda_immediate (function(o) return o+(0xac) end)
lda_immediate (function(o) return o+(INTIM) end)
lda_absolute(function(o) return o+( 0xbeef) end)
lda_absolute(function(o) return o+( INTIM) end)
lda_absolute_nozp(function(o) return o+( INTIM) end)
lda_absolute_x(function(o) return o+( INTIM) end)
lda_absolute_y(function(o) return o+( INTIM) end)
lda_indirect_x (function(o) return o+(INTIM) end)
lda_indirect_y (function(o) return o+(INTIM) end) endpage()
end
asl_implied()
asl_absolute(function(o) return o+( INTIM) end)
asl_implied()
label(function(o) return o+("_toto") end)
bne_relative(function(o) return o+( "test") end)
bne_relative(function(o) return o+( "waitForIntim") end)
bne_relative(function(o) return o+( f()) end)
bne_relative(function(o) return o+( "_toto") end)
jam_implied() asl_implied() lsr_implied() ldx_immediate (function(o) return o+(16) end) ldy_absolute(function(o) return o+( 0xf0f0) end)
rts_implied()
--[[
section "doOverscan"
sta{WSYNC} -- WSYNC=a
lda(2) sta{VBLANK} -- a=2 VBLANK=a
lda(TIM_OVERSCAN) sta{TIM64T} -- a=TIM_OVERSCAN TIM64T=a
jsr "waitForIntim"
section "doVBlank"
lda(0x0e)
label ".vsyncLoop"
sta{WSYNC}
sta{VSYNC}
lsr()
bne ".vsyncLoop"
lda(2)
sta{VBLANK}
lda(TIM_VBLANK)
sta{TIM64T}
jsr "waitForIntim"
section "doKernel"
lda(TIM_KERNEL)
sta{T1024T}
jsr "waitForIntim"
section "start"
-- clear zeropage
cld()
ldx(0)
txa()
label ".clearLoop"
dex()
tsx()
pha()
bne ".clearLoop"
-- main
label "mainLoop"
jsr "doOverscan"
jsr "doVBlank"
jsr "doKernel"
jmp "mainLoop"
section{ name="vectors", org=0xfffc }
word{ "start", "start" }
]]