Last Updated or created 2022-08-15
Started to write a program to generate a memory map like this
It will be a python script which generates a ascii table.
| a15 | a14 | a13 | a12 | a11 | a10 | a09 | a08 | a07 | a06 | a05 | a04 | a03 | a02 | a01 | a00 | | 1 | a | a | a | a | a | a | a | a | a | a | a | a | a | a | a | ROM | 0 | 0 | a | a | a | a | a | a | a | a | a | a | a | a | a | a | RAM | 0 | 1 | 1 | x | x | x | x | x | x | x | x | x | a | a | a | a | VIA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | a | a | a | a | a | a | a | a | PS
Above example shows:
- Rom – $8000 and up
- Ram – $0000 till $3FFF
- Via chip – $6xxx-$7xxxx 16 addresses repeating in this block.
This will be the interesting/hard part - Program stack – in RAM – $0100-$01FF
Generated output
| 0000 | ram | | | | |
| 00ff | ram | | | | |
| 0100 | ram | | ps | | |
| 01ff | ram | | ps | | |
| 0200 | ram | | | | |
| 3fff | ram | | | | |
| 4000 | | | | | |
| 5fff | | | | | |
| 6000 | | | | via1 | |
| 6fff | | | | via1 | |
| 7000 | | | | | via2 |
| 7fff | | | | | via2 |
| 8000 | | rom | | | |
| ffff | | rom | | | |
#!/bin/python
# 0 = address should be 0 .. Duh
# 1 = address should be 1 .. Duh
# a = address 0 or 1
# x = not connected, future function
# try
#via1 = ["0","1","1","0","x","x","x","x","x","x","0","x","a","a","a","a"]
rom = ["1","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a"]
ram = ["0","0","a","a","a","a","a","a","a","a","a","a","a","a","a","a"]
via1 = ["0","1","1","0","x","x","x","x","x","x","x","x","a","a","a","a"]
via2 = ["0","1","1","1","x","x","x","x","x","x","x","x","a","a","a","a"]
ps = ["0","0","0","0","0","0","0","1","a","a","a","a","a","a","a","a"]
counter = 0
prevhexw = f"{0:04x}"
prevram = "nix"
prevrom = "nix"
prevps = "nix"
prevvia1 = "nix"
prevvia2 = "nix"
while counter < 65536:
binw = f"{counter:016b}"
hexw = f"{counter:04x}"
binint = bin(int(counter))
address=0
ramcheck=0
romcheck=0
pscheck=0
via1check=0
via2check=0
printram = " "
printrom = " "
printps = " "
printvia1 = " "
printvia2 = " "
myram=ram.copy()
myrom=rom.copy()
myps=ps.copy()
myvia1=via1.copy()
myvia2=via2.copy()
while address < 16:
if myram[address] == "a":
myram[address]=binw[address]
if myram[address] == "x":
myram[address]=binw[address]
if myram[address] != binw[address]:
ramcheck=1
if myrom[address] == "a":
myrom[address]=binw[address]
if myrom[address] == "x":
myrom[address]=binw[address]
if myrom[address] != binw[address]:
romcheck=1
if myps[address] == "a":
myps[address]=binw[address]
if myps[address] == "x":
myps[address]=binw[address]
if myps[address] != binw[address]:
pscheck=1
if myvia1[address] == "a":
myvia1[address]=binw[address]
if myvia1[address] == "x":
myvia1[address]=binw[address]
if myvia1[address] != binw[address]:
via1check=1
if myvia2[address] == "a":
myvia2[address]=binw[address]
if myvia2[address] == "x":
myvia2[address]=binw[address]
if myvia2[address] != binw[address]:
via2check=1
address=address+1
if ramcheck==0:
printram="ram"
if romcheck==0:
printrom="rom"
if pscheck==0:
printps="ps "
if via1check==0:
printvia1="via1"
if via2check==0:
printvia2="via2"
if prevram != printram or prevrom != printrom or prevps != printps or prevvia1 != printvia1 or prevvia2 != printvia2:
printlinep = f"| {prevhexw} | {prevram} | {prevrom} | {prevps} | {prevvia1} | {prevvia2} |"
printline = f"| {hexw} | {printram} | {printrom} | {printps} | {printvia1} | {printvia2} |"
if prevram != "nix":
print(printlinep)
print(printline)
prevram=printram
prevrom=printrom
prevps=printps
prevvia1=printvia1
prevvia2=printvia2
prevhexw=hexw
counter=counter+1;
printline = f"| {hexw} | {printram} | {printrom} | {printps} | {printvia1} | {printvia2} |"
print(printline)
