mirror of
https://github.com/g012/l65.git
synced 2025-01-19 20:33:08 +00:00
179 lines
3.9 KiB
Plaintext
179 lines
3.9 KiB
Plaintext
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
|
|
|
|
function switchbank(i) bit 0x1ff4+i end
|
|
-- create bank stubs
|
|
for bi=0,7,1 do
|
|
local o=(bi<<12)
|
|
_ENV['bank' .. bi] = location(0x8000+o, 0x8fff+o)
|
|
section{"entry"..bi, org=0x8fee+o} switchbank(0) jmp main
|
|
section{"switchtab"..bi, org=0x8ff4+o} byte(0,0,0,0,0,0,0,0)
|
|
section{"vectors"..bi, org=0x8ffc+o} word(0xffee,0xffee)
|
|
end
|
|
|
|
location(bank0)
|
|
--location(0xf000, 0xffff)
|
|
|
|
if toto ~= 15 then end
|
|
|
|
abc = 13 ~ 0x7
|
|
xyz = 1 << 2
|
|
|
|
x={ f=function() end }
|
|
x:f()
|
|
::lualabel::
|
|
|
|
#pragma syntax6502 off
|
|
lda = 5 if lda < 6 then sta=7 end
|
|
#pragma syntax6502 on
|
|
|
|
local function ptr_table(label, ...)
|
|
local vals = {...}
|
|
section{label .. "_lo", align=16} byte_lo(vals)
|
|
section{label .. "_hi", align=16} byte_hi(vals)
|
|
end
|
|
|
|
charset(" abcdefghijklmnopqrstuvwxyz-")
|
|
@@message2 byte(4, "test", 0)
|
|
charset()
|
|
@@message byte(4, "test", 0)
|
|
|
|
@@data
|
|
crosspage
|
|
byte(1, 2) byte(3, 4)
|
|
end
|
|
word(0xf080) byte(16, 3, 4, 5, 6,
|
|
24, 32)
|
|
word(message2)
|
|
byte_lo(message) byte_hi(message)
|
|
byte(\(message&0xff), \(message>>8))
|
|
|
|
ptr_table("ptrs", message, data, 0)
|
|
|
|
@@main
|
|
lda #0
|
|
|
|
--section{ "toto", align = 256, offset = 16 }
|
|
--section{ "toto", org = 0xf100 }
|
|
--section "waitForIntim"
|
|
@@waitForIntim --alt short syntax when no other option
|
|
-- n_{ a=INTIM } ?
|
|
--lda(INTIM) -- or a=INTIM
|
|
--bne "waitForIntim"
|
|
ldx #0xf0
|
|
ldx #0b1101
|
|
ldy #0xAB - 16 + 0b11011 & 3 | 6 ~ 0xf >> ~3 << 1 // 5
|
|
ldx #15,3
|
|
|
|
local kernel_cycles,kernel_size
|
|
table.insert(section_current.instructions, { asbin=function() kernel_cycles=cycles kernel_size=size end })
|
|
|
|
lda data
|
|
lda data,5
|
|
lda data,5,x
|
|
lda data,5,y
|
|
lda data+3,12
|
|
lda data+3,12,x
|
|
lda data+3,12,y
|
|
lda (VBLANK,5,x)
|
|
lda (\a(a+2),VBLANK,x)
|
|
lda (VBLANK,5),y
|
|
lda (\a(a&3),VBLANK),y
|
|
jmp (VBLANK)
|
|
jmp (VBLANK,12)
|
|
jmp (VBLANK-4)
|
|
|
|
-- cycles are counted without taking any branch
|
|
table.insert(section_current.instructions, { asbin=function() print('kernel cycles: ', cycles-kernel_cycles, 'kernel size: ', size-kernel_size) end })
|
|
|
|
v=7
|
|
lda function(c) return 0xffff&(data * c) end, v
|
|
lda \c((data*c)&0xffff), v
|
|
local f = \c((data*c)&0xffff) v=5 lda !f,v v=3 lda !f,v
|
|
local g = function() return function(c) return (data * c)&0xffff end end
|
|
|
|
lda !g(),v
|
|
#pragma encapsulate off
|
|
lda f,v
|
|
lda !_toto+15,16,x
|
|
lda #15
|
|
#pragma encapsulate on
|
|
|
|
samepage
|
|
lda #0xac
|
|
lda #VBLANK
|
|
lda 0xbeef
|
|
lda VBLANK
|
|
lda.w VBLANK
|
|
lda VBLANK,x
|
|
lda VBLANK,y
|
|
lda (VBLANK,x)
|
|
lda (VBLANK),y
|
|
end
|
|
|
|
beq _toto
|
|
asl
|
|
asl VBLANK
|
|
asl
|
|
@_toto
|
|
bne "_toto"
|
|
bne waitForIntim
|
|
f=\("_toto") bne f()
|
|
bne _toto
|
|
|
|
jam asl lsr ldx #16 ldy 0xf0f0
|
|
rts
|
|
|
|
writebin()
|
|
writesym()
|
|
|
|
--[[
|
|
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" }
|
|
|
|
]]
|