diff --git a/vcs.l65 b/vcs.l65 index 61e38a6..fb8dd8f 100644 --- a/vcs.l65 +++ b/vcs.l65 @@ -207,58 +207,58 @@ end mappers = {} -mappers['2K'] = function(irq) +mappers['2K'] = function() rom0 = location(0xf800, 0xffff) - section{"vectors", org=0xfffc} dc.w main if irq then dc.w main end + section{"vectors", org=0xfffc} dc.w main if mappers.irq then dc.w main end end mappers.CV = mappers['2K'] -mappers['4K'] = function(irq) +mappers['4K'] = function() rom0 = location(0xf000, 0xffff) - section{"vectors", org=0xfffc} dc.w main if irq then dc.w main end + section{"vectors", org=0xfffc} dc.w main if mappers.irq then dc.w main end end -local bank_stubs = function(irq, count, hotspot, entry) - function switchrom(i) assert(i>=0 and i=0 and i=0 and i=0 and i<7) bit 0x1fe0+i end - function enableram() bit 0x1fe7 end - function switchram(i) assert(i>=0 and i<4) bit 0x1fe8+i end +mappers.E7 = function() + function switchrom(i) assert(i>=0 and i<7) if mappers.noillegal then bit 0x1fe0+i else nop 0x1fe0+i end end + function enableram() if mappers.noillegal then bit 0x1fe7 else nop 0x1fe7 end end + function switchram(i) assert(i>=0 and i<4) if mappers.noillegal then bit 0x1fe8+i else nop 0x1fe8+i end end for bi=0,6 do local o = bi*0x800 _ENV['rom' .. bi] = location{o+0xc000, o+0xc7ff, rorg=0xf000} end rom7 = location{0xf800, 0xffff, rorg=0xf800} section{"switchtab", org=0xffe0} for i=1,12 do byte(0) end - section{"vectors", org=0xfffc} dc.w main if irq then dc.w main end + section{"vectors", org=0xfffc} dc.w main if mappers.irq then dc.w main end end -mappers.F0 = function(irq) +mappers.F0 = function() function switchrom() lda 0x1ff0 end for bi=0,15 do local o = bi*0x1000 + 0x1000 @@ -294,14 +294,14 @@ mappers.F0 = function(irq) local l=label() switchrom() bne l if bi==0 then jmp main end section{"switchtab"..bi, org=o+0xff0} byte(bi) - section{"vectors"..bi, org=o+0xffc} dc.w start if irq then dc.w start end + section{"vectors"..bi, org=o+0xffc} dc.w start if mappers.irq then dc.w start end end end -local bank_stubs2 = function(irq, hotspot0, hotspot1) +local bank_stubs2 = function(hotspot0, hotspot1) function switchrom(i) - if i==0 then bit hotspot0 - elseif i==1 then bit hotspot1 + if i==0 then if mappers.noillegal then bit hotspot0 else nop hotspot0 end + elseif i==1 then if mappers.noillegal then bit hotspot1 else nop hotspot1 end else error("invalid rom index: " .. i) end end local base = 0xe000 @@ -309,29 +309,29 @@ local bank_stubs2 = function(irq, hotspot0, hotspot1) local o = base+(bi<<12) _ENV['rom' .. bi] = location{o, o+0xfff, rorg=0xf000} local start=section{"entry"..bi, org=o+0xffc-6} switchrom(0) if bi==0 then jmp main end - section{"vectors"..bi, org=o+0xffc} dc.w start if irq then dc.w start end + section{"vectors"..bi, org=o+0xffc} dc.w start if mappers.irq then dc.w start end end end -mappers.UA = function(irq) bank_stubs2(irq, 0x220, 0x240) end -mappers['0840'] = function(irq) bank_stubs2(irq, 0x800, 0x840) end -mappers.SB = function(count, irq) - function switchrom(i) assert(i>=0 and i=0 and i=0 and i=0 and i<128) lda#i sta 0x3c+i end _ENV['switchram'..i] = function(i) assert(i>=0 and i<128) lda#i+0x80 sta 0x3c+i end @@ -341,17 +341,17 @@ mappers.MC = function(rom_count, ram_count, irq) _ENV["rom"..(count-1-bi)] = location{o, 0x3ff+o, rorg=0xf000+(o&0xfff)} end local start=section("entry") switchrom3(0) jmp main - section{"vectors", org=0xfffc} dc.w start if irq then dc.w start end + section{"vectors", org=0xfffc} dc.w start if mappers.irq then dc.w start end end -mappers.X07 = function(irq) - function switchrom(i) assert(i>=0 and i<16) bit 0x80b+(i<<4) end +mappers.X07 = function() + function switchrom(i) assert(i>=0 and i<16) if mappers.noillegal then bit 0x80b+(i<<4) else nop 0x80b+(i<<4) end end -- map TIA also to 0x40-0x7F: use VSYNC for bank 14, and VSYNC2 for bank 15 vcs.VSYNC2=0x40 cpu.symbols.VSYNC2=0x40 for bi=0,count-1 do local o = bi*0x1000 + 0x1000 _ENV['rom' .. bi] = location{o, o+0xfff, rorg=0xf000} local start=section{"entry"..bi, org=o+0xffc-6} switchrom(0) if bi==0 then jmp main end - section{"vectors"..bi, org=o+0xffc} dc.w start if irq then dc.w start end + section{"vectors"..bi, org=o+0xffc} dc.w start if mappers.irq then dc.w start end end end