;--- BEGIN ---------------------------------------------------; ;--- CONSTANTS -----------------------------------------------; ;--- DATA ----------------------------------------------------; SEGMENT .data beeblequit: db 00 ;-----BefOS "STACK"-----; ossp: dw 0 ;-----Beeblebrox Bindings---; %include "../inc/beeble.inc" ;--- BSS -----------------------------------------------------; SEGMENT .bss ;-----SYSTEM STACK------; osstack: RESB 256 ; BefOS system stack ;--- CODE ----------------------------------------------------; SEGMENT .text ;;--------------------------------------------; ;; cx: word to push -> ;; bx: * -> GARBAGE PushWord: mov bx, [ossp] mov [bx + osstack], cx inc word [ossp] ret ;;--------------------------------------------; ;; cx: * -> word popped ;; bx: * -> GARBAGE PopWord: dec word [ossp] mov bx, [ossp] mov cx, [bx + osstack] ret PushHexInstr: mov bx, [bufptr] xor ch, ch mov cl, [cbuffer + bx] sub cl, 'a' jmp PushWord AddWords: call PopWord mov ax, cx call PopWord add ax, cx mov cx, ax jmp PushWord SubWords: call PopWord mov ax, cx call PopWord sub ax, cx mov cx, ax jmp PushWord MulWords: call PopWord mov ax, cx call PopWord mul cx mov cx, ax jmp PushWord DivWords: call PopWord mov ax, cx call PopWord div cx mov cx, ax jmp PushWord Beeblebrox: xor al, al mov [beeblequit], al .Loop: mov al, [beeblequit] cmp al, 0 jne .BeebleQuit call ExecBeebInstr jmp .Loop .BeebleQuit: ret EndBeeblebrox: mov [beeblequit], byte 1 ret ExecBeebInstr: mov di, [bufptr] xor bh, bh mov bl, [cbuffer + di] shl bx, 1 mov ax, [scripttab + bx] call ax jmp Advance StringMode: jmp Unimp RunBeeble: call BufHome mov [lastmove], word BufRight jmp Beeblebrox ;--- END -----------------------------------------------------;