mirror of
https://github.com/catseye/SixtyPical.git
synced 2025-02-16 15:30:26 +00:00
Initial work on initialized byte tables.
This commit is contained in:
parent
50390b0787
commit
f87bcf5ee4
@ -6,7 +6,7 @@ from sixtypical.model import (
|
||||
TYPE_BIT, TYPE_BYTE, TYPE_BYTE_TABLE, TYPE_WORD, TYPE_WORD_TABLE, BufferType, PointerType, RoutineType, VectorType,
|
||||
REG_A, REG_X, REG_Y, FLAG_C
|
||||
)
|
||||
from sixtypical.emitter import Byte, Word, Label, Offset, LowAddressByte, HighAddressByte
|
||||
from sixtypical.emitter import Byte, Word, Table, Label, Offset, LowAddressByte, HighAddressByte
|
||||
from sixtypical.gen6502 import (
|
||||
Immediate, Absolute, AbsoluteX, AbsoluteY, ZeroPage, Indirect, IndirectY, Relative,
|
||||
LDA, LDX, LDY, STA, STX, STY,
|
||||
@ -78,6 +78,8 @@ class Compiler(object):
|
||||
initial_data = Byte(defn.initial)
|
||||
elif type_ == TYPE_WORD:
|
||||
initial_data = Word(defn.initial)
|
||||
elif type_ == TYPE_BYTE_TABLE:
|
||||
initial_data = Table(defn.initial)
|
||||
else:
|
||||
raise NotImplementedError(type_)
|
||||
label.set_length(initial_data.size())
|
||||
|
@ -48,11 +48,20 @@ class Word(Emittable):
|
||||
|
||||
|
||||
class Table(Emittable):
|
||||
def __init__(self, value):
|
||||
# TODO: range-checking
|
||||
self.value = value
|
||||
|
||||
def size(self):
|
||||
return 256
|
||||
|
||||
def serialize(self, addr=None):
|
||||
return chr(0) * self.size()
|
||||
bytes = []
|
||||
for b in self.value:
|
||||
bytes.append(chr(ord(b)))
|
||||
while len(bytes) < self.size():
|
||||
bytes.append(chr(0))
|
||||
return ''.join(bytes)
|
||||
|
||||
def __repr__(self):
|
||||
return "%s()" % (self.__class__.__name__)
|
||||
|
@ -89,8 +89,11 @@ class Parser(object):
|
||||
|
||||
initial = None
|
||||
if self.scanner.consume(':'):
|
||||
self.scanner.check_type('integer literal')
|
||||
initial = int(self.scanner.token)
|
||||
if type_ == TYPE_BYTE_TABLE and self.scanner.on_type('string literal'):
|
||||
initial = self.scanner.token
|
||||
else:
|
||||
self.scanner.check_type('integer literal')
|
||||
initial = int(self.scanner.token)
|
||||
self.scanner.scan()
|
||||
|
||||
addr = None
|
||||
|
@ -137,6 +137,276 @@ Word memory locations with explicit address, initial value.
|
||||
= $081A .byte $BB
|
||||
= $081B .byte $0B
|
||||
|
||||
Initialized byte table.
|
||||
|
||||
| byte table message : "WHAT?"
|
||||
|
|
||||
| routine main
|
||||
| inputs message
|
||||
| outputs x, a, z, n
|
||||
| {
|
||||
| ld x, 0
|
||||
| ld a, message + x
|
||||
| }
|
||||
= $080D LDX #$00
|
||||
= $080F LDA $0813,X
|
||||
= $0812 RTS
|
||||
= $0813 .byte $57
|
||||
= $0814 PHA
|
||||
= $0815 EOR ($54,X)
|
||||
= $0817 .byte $3F
|
||||
= $0818 BRK
|
||||
= $0819 BRK
|
||||
= $081A BRK
|
||||
= $081B BRK
|
||||
= $081C BRK
|
||||
= $081D BRK
|
||||
= $081E BRK
|
||||
= $081F BRK
|
||||
= $0820 BRK
|
||||
= $0821 BRK
|
||||
= $0822 BRK
|
||||
= $0823 BRK
|
||||
= $0824 BRK
|
||||
= $0825 BRK
|
||||
= $0826 BRK
|
||||
= $0827 BRK
|
||||
= $0828 BRK
|
||||
= $0829 BRK
|
||||
= $082A BRK
|
||||
= $082B BRK
|
||||
= $082C BRK
|
||||
= $082D BRK
|
||||
= $082E BRK
|
||||
= $082F BRK
|
||||
= $0830 BRK
|
||||
= $0831 BRK
|
||||
= $0832 BRK
|
||||
= $0833 BRK
|
||||
= $0834 BRK
|
||||
= $0835 BRK
|
||||
= $0836 BRK
|
||||
= $0837 BRK
|
||||
= $0838 BRK
|
||||
= $0839 BRK
|
||||
= $083A BRK
|
||||
= $083B BRK
|
||||
= $083C BRK
|
||||
= $083D BRK
|
||||
= $083E BRK
|
||||
= $083F BRK
|
||||
= $0840 BRK
|
||||
= $0841 BRK
|
||||
= $0842 BRK
|
||||
= $0843 BRK
|
||||
= $0844 BRK
|
||||
= $0845 BRK
|
||||
= $0846 BRK
|
||||
= $0847 BRK
|
||||
= $0848 BRK
|
||||
= $0849 BRK
|
||||
= $084A BRK
|
||||
= $084B BRK
|
||||
= $084C BRK
|
||||
= $084D BRK
|
||||
= $084E BRK
|
||||
= $084F BRK
|
||||
= $0850 BRK
|
||||
= $0851 BRK
|
||||
= $0852 BRK
|
||||
= $0853 BRK
|
||||
= $0854 BRK
|
||||
= $0855 BRK
|
||||
= $0856 BRK
|
||||
= $0857 BRK
|
||||
= $0858 BRK
|
||||
= $0859 BRK
|
||||
= $085A BRK
|
||||
= $085B BRK
|
||||
= $085C BRK
|
||||
= $085D BRK
|
||||
= $085E BRK
|
||||
= $085F BRK
|
||||
= $0860 BRK
|
||||
= $0861 BRK
|
||||
= $0862 BRK
|
||||
= $0863 BRK
|
||||
= $0864 BRK
|
||||
= $0865 BRK
|
||||
= $0866 BRK
|
||||
= $0867 BRK
|
||||
= $0868 BRK
|
||||
= $0869 BRK
|
||||
= $086A BRK
|
||||
= $086B BRK
|
||||
= $086C BRK
|
||||
= $086D BRK
|
||||
= $086E BRK
|
||||
= $086F BRK
|
||||
= $0870 BRK
|
||||
= $0871 BRK
|
||||
= $0872 BRK
|
||||
= $0873 BRK
|
||||
= $0874 BRK
|
||||
= $0875 BRK
|
||||
= $0876 BRK
|
||||
= $0877 BRK
|
||||
= $0878 BRK
|
||||
= $0879 BRK
|
||||
= $087A BRK
|
||||
= $087B BRK
|
||||
= $087C BRK
|
||||
= $087D BRK
|
||||
= $087E BRK
|
||||
= $087F BRK
|
||||
= $0880 BRK
|
||||
= $0881 BRK
|
||||
= $0882 BRK
|
||||
= $0883 BRK
|
||||
= $0884 BRK
|
||||
= $0885 BRK
|
||||
= $0886 BRK
|
||||
= $0887 BRK
|
||||
= $0888 BRK
|
||||
= $0889 BRK
|
||||
= $088A BRK
|
||||
= $088B BRK
|
||||
= $088C BRK
|
||||
= $088D BRK
|
||||
= $088E BRK
|
||||
= $088F BRK
|
||||
= $0890 BRK
|
||||
= $0891 BRK
|
||||
= $0892 BRK
|
||||
= $0893 BRK
|
||||
= $0894 BRK
|
||||
= $0895 BRK
|
||||
= $0896 BRK
|
||||
= $0897 BRK
|
||||
= $0898 BRK
|
||||
= $0899 BRK
|
||||
= $089A BRK
|
||||
= $089B BRK
|
||||
= $089C BRK
|
||||
= $089D BRK
|
||||
= $089E BRK
|
||||
= $089F BRK
|
||||
= $08A0 BRK
|
||||
= $08A1 BRK
|
||||
= $08A2 BRK
|
||||
= $08A3 BRK
|
||||
= $08A4 BRK
|
||||
= $08A5 BRK
|
||||
= $08A6 BRK
|
||||
= $08A7 BRK
|
||||
= $08A8 BRK
|
||||
= $08A9 BRK
|
||||
= $08AA BRK
|
||||
= $08AB BRK
|
||||
= $08AC BRK
|
||||
= $08AD BRK
|
||||
= $08AE BRK
|
||||
= $08AF BRK
|
||||
= $08B0 BRK
|
||||
= $08B1 BRK
|
||||
= $08B2 BRK
|
||||
= $08B3 BRK
|
||||
= $08B4 BRK
|
||||
= $08B5 BRK
|
||||
= $08B6 BRK
|
||||
= $08B7 BRK
|
||||
= $08B8 BRK
|
||||
= $08B9 BRK
|
||||
= $08BA BRK
|
||||
= $08BB BRK
|
||||
= $08BC BRK
|
||||
= $08BD BRK
|
||||
= $08BE BRK
|
||||
= $08BF BRK
|
||||
= $08C0 BRK
|
||||
= $08C1 BRK
|
||||
= $08C2 BRK
|
||||
= $08C3 BRK
|
||||
= $08C4 BRK
|
||||
= $08C5 BRK
|
||||
= $08C6 BRK
|
||||
= $08C7 BRK
|
||||
= $08C8 BRK
|
||||
= $08C9 BRK
|
||||
= $08CA BRK
|
||||
= $08CB BRK
|
||||
= $08CC BRK
|
||||
= $08CD BRK
|
||||
= $08CE BRK
|
||||
= $08CF BRK
|
||||
= $08D0 BRK
|
||||
= $08D1 BRK
|
||||
= $08D2 BRK
|
||||
= $08D3 BRK
|
||||
= $08D4 BRK
|
||||
= $08D5 BRK
|
||||
= $08D6 BRK
|
||||
= $08D7 BRK
|
||||
= $08D8 BRK
|
||||
= $08D9 BRK
|
||||
= $08DA BRK
|
||||
= $08DB BRK
|
||||
= $08DC BRK
|
||||
= $08DD BRK
|
||||
= $08DE BRK
|
||||
= $08DF BRK
|
||||
= $08E0 BRK
|
||||
= $08E1 BRK
|
||||
= $08E2 BRK
|
||||
= $08E3 BRK
|
||||
= $08E4 BRK
|
||||
= $08E5 BRK
|
||||
= $08E6 BRK
|
||||
= $08E7 BRK
|
||||
= $08E8 BRK
|
||||
= $08E9 BRK
|
||||
= $08EA BRK
|
||||
= $08EB BRK
|
||||
= $08EC BRK
|
||||
= $08ED BRK
|
||||
= $08EE BRK
|
||||
= $08EF BRK
|
||||
= $08F0 BRK
|
||||
= $08F1 BRK
|
||||
= $08F2 BRK
|
||||
= $08F3 BRK
|
||||
= $08F4 BRK
|
||||
= $08F5 BRK
|
||||
= $08F6 BRK
|
||||
= $08F7 BRK
|
||||
= $08F8 BRK
|
||||
= $08F9 BRK
|
||||
= $08FA BRK
|
||||
= $08FB BRK
|
||||
= $08FC BRK
|
||||
= $08FD BRK
|
||||
= $08FE BRK
|
||||
= $08FF BRK
|
||||
= $0900 BRK
|
||||
= $0901 BRK
|
||||
= $0902 BRK
|
||||
= $0903 BRK
|
||||
= $0904 BRK
|
||||
= $0905 BRK
|
||||
= $0906 BRK
|
||||
= $0907 BRK
|
||||
= $0908 BRK
|
||||
= $0909 BRK
|
||||
= $090A BRK
|
||||
= $090B BRK
|
||||
= $090C BRK
|
||||
= $090D BRK
|
||||
= $090E BRK
|
||||
= $090F BRK
|
||||
= $0910 BRK
|
||||
= $0911 BRK
|
||||
= $0912 BRK
|
||||
|
||||
Some instructions.
|
||||
|
||||
| byte foo
|
||||
|
@ -178,6 +178,22 @@ User-defined locations of other types.
|
||||
| }
|
||||
= ok
|
||||
|
||||
Initialized byte table.
|
||||
|
||||
| byte table message : "WHAT DO YOU WANT TO DO NEXT?"
|
||||
|
|
||||
| routine main {
|
||||
| }
|
||||
= ok
|
||||
|
||||
Can't initialize anything but a byte table with a string.
|
||||
|
||||
| word message : "WHAT DO YOU WANT TO DO NEXT?"
|
||||
|
|
||||
| routine main {
|
||||
| }
|
||||
? SyntaxError
|
||||
|
||||
Can't access an undeclared memory location.
|
||||
|
||||
| routine main {
|
||||
|
Loading…
x
Reference in New Issue
Block a user