Difference between revisions of "Module:Address"
From ALttP Speedrunning Wiki
Line 7: | Line 7: | ||
local addr = args[1] or 'FF' | local addr = args[1] or 'FF' | ||
local size = args[2] or 1 | local size = args[2] or 1 | ||
+ | |||
+ | addr = addr:gsub('%$', '') | ||
+ | |||
local suffix = args.s or '' | local suffix = args.s or '' | ||
local trimmed, title, len = p._main(addr, size) | local trimmed, title, len = p._main(addr, size) |
Revision as of 10:54, 22 May 2019
Documentation for this module may be created at Module:Address/doc
local p = {} local HEX = require('Module:Base convert') function p.main(frame) local args = frame:getParent().args local addr = args[1] or 'FF' local size = args[2] or 1 addr = addr:gsub('%$', '') local suffix = args.s or '' local trimmed, title, len = p._main(addr, size) local ret = mw.html.create('code') :attr('title', title) :wikitext(trimmed) :wikitext(len) :wikitext(suffix) return ret end function p._main(addr, size) local addr10 = tonumber(HEX._convert(addr, 10, 16)) local addr10short = addr10 % 0x10000 local bank = (addr10 - addr10short) / 0x10000 local size10 = tonumber(HEX._convert(size or 1, 10, 16)) local title = '' local length = 0 local len = '' if addr10short <= 0xFF then title = 'Direct Page address' length = 2 elseif addr10short <= 0x1FFF then title = 'Short address' length = 4 elseif addr10short <= 0x7FFF then title = 'Hardware register' length = 4 elseif addr10 <= 0xFFFF then title = 'Local address' length = 4 else title = string.format('Long address: Bank $%02X; $%04X', bank, addr10short) length = 6 end local ret = string.format('$%0'..length..'X', addr10) if size10 > 1 then len = string.format('[0x%X]', size10) title = title .. string.format('; 0x%X bytes (%s bytes) in length', size10, size10) end return ret, title, len end return p