From 6d2b631999eaa4e35fc02946496d7ddbcd0a2c38 Mon Sep 17 00:00:00 2001 From: goldbuick Date: Mon, 29 Apr 2024 23:07:11 -0400 Subject: [PATCH] feat: code execution requires a codepage type --- zss/firmware/all.ts | 21 +++++++++++++++++++++ zss/firmware/loader.ts | 18 ++++++++++++++++-- zss/memory/book.ts | 3 ++- zss/memory/index.ts | 5 ++++- zss/os.ts | 9 +++++---- 5 files changed, 48 insertions(+), 8 deletions(-) create mode 100644 zss/firmware/all.ts diff --git a/zss/firmware/all.ts b/zss/firmware/all.ts new file mode 100644 index 000000000..fc6402609 --- /dev/null +++ b/zss/firmware/all.ts @@ -0,0 +1,21 @@ +import { createfirmware } from 'zss/firmware' + +export const ALL_FIRMWARE = createfirmware({ + get(chip, name) { + return [false, undefined] + }, + set(chip, name, value) { + return [false, undefined] + }, + shouldtick(chip) { + // + }, + tick(chip) { + // + }, + tock(chip) { + // + }, +}).command('stub', (chip, words) => { + return 0 +}) diff --git a/zss/firmware/loader.ts b/zss/firmware/loader.ts index aca54304d..7a491e653 100644 --- a/zss/firmware/loader.ts +++ b/zss/firmware/loader.ts @@ -1,16 +1,30 @@ import { CHIP } from 'zss/chip' import { FIRMWARE } from 'zss/firmware' +import { CODE_PAGE_TYPE } from 'zss/memory/codepage' +import { ALL_FIRMWARE } from './all' import { ZSS_FIRMWARE } from './zss' import { ZZT_FIRMWARE } from './zzt' const firmwares: Record = { + all: ALL_FIRMWARE, zzt: ZZT_FIRMWARE, zss: ZSS_FIRMWARE, } -export type FIRMWARE_NAME = keyof typeof firmwares +export const CODE_PAGE_FIRMWARE = { + [CODE_PAGE_TYPE.ERROR]: [], + [CODE_PAGE_TYPE.FUNC]: ['all'], + [CODE_PAGE_TYPE.BOARD]: ['all'], + [CODE_PAGE_TYPE.OBJECT]: ['all', 'zss', 'zzt'], + [CODE_PAGE_TYPE.TERRAIN]: ['all'], + [CODE_PAGE_TYPE.CHARSET]: ['all'], + [CODE_PAGE_TYPE.PALETTE]: ['all'], +} + +export type FIRMWARE_NAME = keyof typeof CODE_PAGE_FIRMWARE -export function loadfirmware(chip: CHIP, items: FIRMWARE_NAME[]) { +export function loadfirmware(chip: CHIP, firmware: CODE_PAGE_TYPE) { + const items = CODE_PAGE_FIRMWARE[firmware] ?? [] items.forEach((name) => chip.install(firmwares[name])) } diff --git a/zss/memory/book.ts b/zss/memory/book.ts index 3260ff847..ffe91b6b4 100644 --- a/zss/memory/book.ts +++ b/zss/memory/book.ts @@ -470,6 +470,7 @@ export function bookboardtick( target: BOARD_ELEMENT, id: string, code: string, + type: CODE_PAGE_TYPE, ) => void, ) { if (!ispresent(book) || !ispresent(board)) { @@ -506,7 +507,7 @@ export function bookboardtick( } // signal id & code - oncode(book, board, target, target.id, code) + oncode(book, board, target, target.id, code, CODE_PAGE_TYPE.OBJECT) } // cleanup objects flagged for deletion diff --git a/zss/memory/index.ts b/zss/memory/index.ts index b64b2cf48..0333a2c9c 100644 --- a/zss/memory/index.ts +++ b/zss/memory/index.ts @@ -33,6 +33,7 @@ import { bookreadboard, bookreadobject, } from './book' +import { CODE_PAGE_TYPE } from './codepage' import { FRAME_STATE, FRAME_TYPE, @@ -183,6 +184,7 @@ export function memorytick(os: OS, timestamp: number) { target: BOARD_ELEMENT, id: string, code: string, + type: CODE_PAGE_TYPE, ) { // set context const context = memoryreadchip(id) @@ -191,7 +193,8 @@ export function memorytick(os: OS, timestamp: number) { context.target = target context.inputcurrent = undefined // run chip code - os.tick(id, timestamp, code, ['zss', 'zzt']) + // + os.tick(id, timestamp, code, type) } // update boards / build code / run chips diff --git a/zss/os.ts b/zss/os.ts index bca63af8c..3ea97a066 100644 --- a/zss/os.ts +++ b/zss/os.ts @@ -1,8 +1,9 @@ import { CHIP, createchip } from './chip' import { MESSAGE_FUNC, parsetarget } from './device' -import { FIRMWARE_NAME, loadfirmware } from './firmware/loader' +import { loadfirmware } from './firmware/loader' import { GeneratorBuild, compile } from './lang/generator' import { ispresent } from './mapping/types' +import { CODE_PAGE_TYPE } from './memory/codepage' export type OS = { ids: () => string[] @@ -12,7 +13,7 @@ export type OS = { id: string, timestamp: number, code: string, - firmwares: FIRMWARE_NAME[], + type: CODE_PAGE_TYPE, ) => boolean message: MESSAGE_FUNC } @@ -47,7 +48,7 @@ export function createos() { } return !!chip }, - tick(id, timestamp, code, firmwares) { + tick(id, timestamp, code, type) { let chip = chips[id] if (!ispresent(chips[id])) { @@ -63,7 +64,7 @@ export function createos() { chip = chips[id] = createchip(id, result) // load chip firmware - loadfirmware(chip, firmwares) + loadfirmware(chip, type) } return !!chip?.tick(timestamp)