c64mem: combined Microsoft & Commodore descriptions

This commit is contained in:
Michael Steil 2020-05-11 17:51:01 +02:00
parent d47baff1f1
commit 8cb9f8d106
4 changed files with 235 additions and 214 deletions

View file

@ -1,3 +1,216 @@
- C64 RAM Map (Microsoft/Commodore)
-
- The labels and descriptions have been taken from
- Microsoft's original BASIC for M6502 source
- and
- The original C64 KERNAL source by Commodore (901227-03)
- https://github.com/mist64/cbmsrc
-
- Converted and formatted by Michael Steil <mist64@mac.com>
-
- Corrections (typos as well as content), translations etc.
- welcome at: https://github.com/mist64/c64disasm
-
------------------------------------------------------------
-
# This plain text file is formatted so that it can be automatically
# parsed in order to create cross-references etc.
# * Lines starting with "-" is top-level information. The first line
# is the title. Lines starting with "--" are separators.
# * Lines starting with "#" are internal comments.
# * Hex addresses start at column 0.
# * Symbols start at column 13.
# * The description starts at column 21.
# * All lines of the description until the first blank line are
# combined into the heading.
# * A '.' character at the end of a heading line represents a hard
# line break.
# * The remaining text is in MarkDown format.
# * All addresses are 4 digits and have a leading '$'.
# The encoding is UTF-8.
#
# KERNAL
#
$0000 D6510 6510 DATA DIRECTION REGISTER
$0001 R6510 6510 DATA REGISTER
#
# BASIC
#
$0003-$0004 ADRAY1 STORE HERE THE ADDR OF THE
ROUTINE TO TURN THE FAC INTO A
TWO BYTE SIGNED INTEGER IN [Y,A]
$0005-$0006 ADRAY2 STORE HERE THE ADDR OF THE
ROUTINE TO CONVERT [Y,A] TO A FLOATING
POINT NUMBER IN THE FAC.
$0007 CHARAC A DELIMITING CHARACTER.
$0007 INTEGR A ONE-BYTE INTEGER FROM "QINT".
$0008 ENDCHR THE OTHER DELIMITING CHARACTER.
$0009 TRMPOS POSITION OF TERMINAL CARRIAGE.
$000B COUNT A GENERAL COUNTER.
$000C DIMFLG IN GETTING A POINTER TO A VARIABLE
IT IS IMPORTANT TO REMEMBER WHETHER IT
IS BEING DONE FOR "DIM" OR NOT.
DIMFLG AND VALTYP MUST BE
CONSECUTIVE LOCATIONS.
$000D VALTYP THE TYPE INDICATOR.
0=NUMERIC 1=STRING.
$000E INTFLG TELLS IF INTEGER.
$000F DORES WHETHER CAN OR CAN'T CRUNCH RES'D WORDS.
TURNED ON WHEN "DATA"
BEING SCANNED BY CRUNCH SO UNQUOTED
STRINGS WON'T BE CRUNCHED.
$000F GARBFL WHETHER TO DO GARBAGE COLLECTION.
$0010 SUBFLG FLAG WHETHER SUB'D VARIABLE ALLOWED.
"FOR" AND USER-DEFINED FUNCTION
POINTER FETCHING TURN
THIS ON BEFORE CALLING "PTRGET"
SO ARRAYS WON'T BE DETECTED.
"STKINI" AND "PTRGET" CLEAR IT.
ALSO DISALLOWS INTEGERS THERE.
$0011 INPFLG FLAGS WHETHER WE ARE DOING "INPUT"
OR "READ".
$0012 TANSGN USED IN DETERMINING SIGN OF TANGENT.
$0012 DOMASK MASK IN USE BY RELATION OPERATIONS.
$0013 CHANNL HOLDS CHANNEL NUMBER.
$0014-$0015 LINNUM LOCATION TO STORE LINE NUMBER BEFORE BUF
SO THAT "BLTUC" CAN STORE IT ALL AWAY AT ONCE.
A COMMA (PRELOAD OR FROM ROM)
USED BY INPUT STATEMENT SINCE THE
DATA POINTER ALWAYS STARTS ON A
COMMA OR TERMINATOR.
$0014-$0015 POKER SET UP LOCATION USED BY POKE.
TEMPORARY FOR INPUT AND READ CODE
$0016 TEMPPT POINTER AT FIRST FREE TEMP DESCRIPTOR.
INITIALIZED TO POINT TO TEMPST.
$0017-$0018 LASTPT POINTER TO LAST-USED STRING TEMPORARY.
$0019-$0021 TEMPST STORAGE FOR NUMTMP TEMP DESCRIPTORS.
$0022-$0025 INDEX INDEXES.
$0022-$0023 INDEX1
$0024-$0025 INDEX2
$0026 RESHO RESULT OF MULTIPLIER AND DIVIDER.
$0027 RESMOH ONE MORE BYTE.
$0028 RESMO
$0028 ADDEND TEMPORARY USED BY "UMULT".
$0029 RESLO
$002B-$002C TXTTAB POINTER TO BEGINNING OF TEXT.
DOESN'T CHANGE AFTER BEING
SETUP BY "INIT".
$002D-$002E VARTAB POINTER TO START OF SIMPLE
VARIABLE SPACE.
UPDATED WHENEVER THE SIZE OF THE
PROGRAM CHANGES, SET TO [TXTTAB]
BY "SCRATCH" ("NEW").
$002F-$0030 ARYTAB POINTER TO BEGINNING OF ARRAY
TABLE.
INCREMENTED BY 6 WHENEVER
A NEW SIMPLE VARIABLE IS FOUND, AND
SET TO [VARTAB] BY "CLEARC".
$0031-$0032 STREND END OF STORAGE IN USE.
INCREASED WHENEVER A NEW ARRAY
OR SIMPLE VARIABLE IS ENCOUNTERED.
SET TO [VARTAB] BY "CLEARC".
$0033-$0034 FRETOP TOP OF STRING FREE SPACE.
$0035-$0036 FRESPC POINTER TO NEW STRING.
$0037-$0038 MEMSIZ HIGHEST LOCATION IN MEMORY.
$0039-$003A CURLIN CURRENT LINE #.
SET TO 0,255 FOR DIRECT STATEMENTS.
$003B-$003C OLDLIN OLD LINE NUMBER (SETUP BY ^C,"STOP"
OR "END" IN A PROGRAM).
$003D-$003E OLDTXT OLD TEXT POINTER.
POINTS AT STATEMENT TO BE EXEC'D NEXT.
$003F-$0040 DATLIN DATA LINE # -- REMEMBER FOR ERRORS.
$0041-$0042 DATPTR POINTER TO DATA. INITIALIZED TO POINT
AT THE ZERO IN FRONT OF [TXTTAB]
BY "RESTORE" WHICH IS CALLED BY "CLEARC".
UPDATED BY EXECUTION OF A "READ".
$0043-$0044 INPPTR THIS REMEMBERS WHERE INPUT IS COMING FROM.
$0045-$0046 VARNAM VARIABLE'S NAME IS STORED HERE.
$0047-$0048 VARPNT POINTER TO VARIABLE IN MEMORY.
$0047 FDECPT POINTER INTO POWER OF TENS OF "FOUT".
$0049-$004A FORPNT A VARIABLE'S POINTER FOR "FOR" LOOPS
AND "LET" STATEMENTS.
$0049 LSTPNT PNTR TO LIST STRING.
$0049 ANDMSK THE MASK USED BY WAIT FOR ANDING.
$004A EORMSK THE MASK FOR EORING IN WAIT.
$004B-$004C OPPTR POINTER TO CURRENT OP'S ENTRY IN "OPTAB".
$004B VARTXT POINTER INTO LIST OF VARIABLES.
$004D OPMASK MASK CREATED BY CURRENT OPERATOR.
$004E-$004F DEFPNT POINTER USED IN FUNCTION DEFINITION.
$004E GRBPNT ANOTHER USED IN GARBAGE COLLECTION.
$004E TEMPF3 A THIRD FAC TEMPORARY (4 BYTES).
$0050-$0052 DSCPNT POINTER TO A STRING DESCRIPTOR.
$0053 FOUR6 VARIABLE CONSTANT USED BY GARB COLLECT.
$0054-$0056 JMPER
$0055 SIZE
$0056 OLDOV THE OLD OVERFLOW.
$0057 TEMPF1
$0058 HIGHDS DESINATION OF HIGHEST ELEMENT IN BLT.
$005A HIGHTR SOURCE OF HIGHEST ELEMENT TO MOVE.
$005C TEMPF2
$005D LOWDS LOCATION OF LAST BYTE TRANSFERRED INTO.
$005F LOWTR LAST THING TO MOVE IN BLT.
$0058 ARYPNT A POINTER USED IN ARRAY BUILDING.
$005F GRBTOP A POINTER USED IN GARBAGE COLLECTION.
$005D DECCNT NUMBER OF PLACES BEFORE DECIMAL POINT.
$005E TENEXP HAS A DPT BEEN INPUT?
$005F DPTFLG BASE TEN EXPONENT.
$0060 EXPSGN SIGN OF BASE TEN EXPONENT.
$0061-$0066 FAC THE FLOATING ACCUMULATOR
$0061 FACEXP
$0061 DSCTMP THIS IS WHERE TEMP DESCS ARE BUILT.
$0062 FACHO MOST SIGNIFICANT BYTE OF MANTISSA.
$0063 FACMOH ONE MORE.
$0064 FACMO MIDDLE ORDER OF MANTISSA.
$0064 INDICE INDICE IS SET UP HERE BY "QINT".
$0065 FACLO LEAST SIG BYTE OF MANTISSA.
$0066 FACSGN SIGN OF FAC (0 OR -1) WHEN UNPACKED.
$0067 SGNFLG SIGN OF FAC IS PRESERVED BERE BY "FIN".
$0067 DEGREE A COUNT USED BY POLYNOMIALS.
$0068 BITS SOMETHING FOR "SHIFTR" TO USE.
$0069 ARGEXP THE FLOATING ARGUMENT (UNPACKED)
$006A ARGHO
$006B ARGMOH
$006C ARGMO
$006D ARGLO
$006E ARGSGN
$006F ARISGN A SIGN REFLECTING THE RESULT.
$006F STRNG1 POINTER TO A STRING OR DESCRIPTOR.
$0070 FACOV OVERFLOW BYTE OF THE FAC.
$0071-$0072 FBUFPT POINTER INTO FBUFFR USED BY FOUT.
$0071 BUFPTR POINTER TO BUF USED BY "CRUNCH".
$0071 STRNG2 POINTER TO STRING OR DESC.
$0071 POLYPT POINTER INTO POLYNOMIAL COEFFICIENTS.
$0071 CURTOL ABSOLUTE LINEAR INDEX IS FORMED HERE.
$0073-$008A CHRGET RAM CODE.
THIS CODE GETS CHANGED THROUGHOUT EXECUTION.
IT IS MADE TO BE FAST THIS WAY.
ALSO, [X] AND [Y] ARE NOT DISTURBED
"CHRGET" USING [TXTPTR] AS THE CURRENT TEXT PNTR
FETCHES A NEW CHARACTER INTO ACCA AFTER INCREMENTING [TXTPTR]
AND SETS CONDITION CODES ACCORDING TO WHAT'S IN ACCA.
NOT C= NUMERIC ("0" THRU "9")
Z= ":" OR END-OF-LINE (A NULL)
[ACCA] = NEW CHAR.
[TXTPTR]=[TXTPTR]+1
THE FOLLOWING EXISTS IN ROM IF ROM EXISTS AND IS LOADED
DOWN HERE BY INIT. OTHERWISE IT IS JUST LOADED INTO THIS
RAM LIKE ALL THE REST OF RAM IS LOADED.
$008B-$008F RNDX
#
# KERNAL
#
$0090 STATUS I/O OPERATION STATUS BYTE
$0091 STKEY STOP KEY FLAG
$0092 SVXT TEMPORARY
@ -90,7 +303,26 @@ $00F9-$00FA ROBUF RS-232 OUTPUT BUFFER POINTER
$00FB-$00FE FREKZP FREE KERNAL ZERO PAGE 9/24/80
$00FF BASZPT LOCATION ($00FF) USED BY BASIC
$0100 BAD
#
# BASIC
#
$0200-$0258 BUF BASIC/MONITOR BUFFER
TYPE IN STORED HERE.
DIRECT STATEMENTS EXECUTE OUT OF
HERE. REMEMBER "INPUT" SMASHES BUF.
MUST BE ON PAGE ZERO
OR ASSIGNMENT OF STRING
VALUES IN DIRECT STATEMENTS WON'T COPY
INTO STRING SPACE -- WHICH IT MUST.
N.B. TWO NONZERO BYTES MUST PRECEDE "BUFLNM".
#
# KERNAL
#
$0259-$0262 LAT LOGICAL FILE NUMBERS
$0263-$026C FAT PRIMARY DEVICE NUMBERS
$026D-$0276 SAT SECONDARY ADDRESSES

View file

@ -1,178 +0,0 @@
$0000 D6510 6510 DATA DIRECTION REGISTER
$0001 R6510 6510 DATA REGISTER
$0003-$0004 ADRAY1 STORE HERE THE ADDR OF THE
ROUTINE TO TURN THE FAC INTO A
TWO BYTE SIGNED INTEGER IN [Y,A]
$0005-$0006 ADRAY2 STORE HERE THE ADDR OF THE
ROUTINE TO CONVERT [Y,A] TO A FLOATING
POINT NUMBER IN THE FAC.
$0007 CHARAC A DELIMITING CHARACTER.
$0007 INTEGR A ONE-BYTE INTEGER FROM "QINT".
$0008 ENDCHR THE OTHER DELIMITING CHARACTER.
$0009 TRMPOS POSITION OF TERMINAL CARRIAGE.
$000B COUNT A GENERAL COUNTER.
$000C DIMFLG IN GETTING A POINTER TO A VARIABLE
IT IS IMPORTANT TO REMEMBER WHETHER IT
IS BEING DONE FOR "DIM" OR NOT.
DIMFLG AND VALTYP MUST BE
CONSECUTIVE LOCATIONS.
$000D VALTYP THE TYPE INDICATOR.
0=NUMERIC 1=STRING.
$000E INTFLG TELLS IF INTEGER.
$000F DORES WHETHER CAN OR CAN'T CRUNCH RES'D WORDS.
TURNED ON WHEN "DATA"
BEING SCANNED BY CRUNCH SO UNQUOTED
STRINGS WON'T BE CRUNCHED.
$000F GARBFL WHETHER TO DO GARBAGE COLLECTION.
$0010 SUBFLG FLAG WHETHER SUB'D VARIABLE ALLOWED.
"FOR" AND USER-DEFINED FUNCTION
POINTER FETCHING TURN
THIS ON BEFORE CALLING "PTRGET"
SO ARRAYS WON'T BE DETECTED.
"STKINI" AND "PTRGET" CLEAR IT.
ALSO DISALLOWS INTEGERS THERE.
$0011 INPFLG FLAGS WHETHER WE ARE DOING "INPUT"
OR "READ".
$0012 TANSGN USED IN DETERMINING SIGN OF TANGENT.
$0012 DOMASK MASK IN USE BY RELATION OPERATIONS.
$0013 CHANNL HOLDS CHANNEL NUMBER.
$0014-$0015 LINNUM LOCATION TO STORE LINE NUMBER BEFORE BUF
SO THAT "BLTUC" CAN STORE IT ALL AWAY AT ONCE.
A COMMA (PRELOAD OR FROM ROM)
USED BY INPUT STATEMENT SINCE THE
DATA POINTER ALWAYS STARTS ON A
COMMA OR TERMINATOR.
$0014-$0015 POKER SET UP LOCATION USED BY POKE.
TEMPORARY FOR INPUT AND READ CODE
$0016 TEMPPT POINTER AT FIRST FREE TEMP DESCRIPTOR.
INITIALIZED TO POINT TO TEMPST.
$0017-$0018 LASTPT POINTER TO LAST-USED STRING TEMPORARY.
$0019-$0021 TEMPST STORAGE FOR NUMTMP TEMP DESCRIPTORS.
$0022-$0025 INDEX INDEXES.
$0022-$0023 INDEX1
$0024-$0025 INDEX2
$0026 RESHO RESULT OF MULTIPLIER AND DIVIDER.
$0027 RESMOH ONE MORE BYTE.
$0028 RESMO
$0028 ADDEND TEMPORARY USED BY "UMULT".
$0029 RESLO
$002B-$002C TXTTAB POINTER TO BEGINNING OF TEXT.
DOESN'T CHANGE AFTER BEING
SETUP BY "INIT".
$002D-$002E VARTAB POINTER TO START OF SIMPLE
VARIABLE SPACE.
UPDATED WHENEVER THE SIZE OF THE
PROGRAM CHANGES, SET TO [TXTTAB]
BY "SCRATCH" ("NEW").
$002F-$0030 ARYTAB POINTER TO BEGINNING OF ARRAY
TABLE.
INCREMENTED BY 6 WHENEVER
A NEW SIMPLE VARIABLE IS FOUND, AND
SET TO [VARTAB] BY "CLEARC".
$0031-$0032 STREND END OF STORAGE IN USE.
INCREASED WHENEVER A NEW ARRAY
OR SIMPLE VARIABLE IS ENCOUNTERED.
SET TO [VARTAB] BY "CLEARC".
$0033-$0034 FRETOP TOP OF STRING FREE SPACE.
$0035-$0036 FRESPC POINTER TO NEW STRING.
$0037-$0038 MEMSIZ HIGHEST LOCATION IN MEMORY.
$0039-$003A CURLIN CURRENT LINE #.
SET TO 0,255 FOR DIRECT STATEMENTS.
$003B-$003C OLDLIN OLD LINE NUMBER (SETUP BY ^C,"STOP"
OR "END" IN A PROGRAM).
$003D-$003E OLDTXT OLD TEXT POINTER.
POINTS AT STATEMENT TO BE EXEC'D NEXT.
$003F-$0040 DATLIN DATA LINE # -- REMEMBER FOR ERRORS.
$0041-$0042 DATPTR POINTER TO DATA. INITIALIZED TO POINT
AT THE ZERO IN FRONT OF [TXTTAB]
BY "RESTORE" WHICH IS CALLED BY "CLEARC".
UPDATED BY EXECUTION OF A "READ".
$0043-$0044 INPPTR THIS REMEMBERS WHERE INPUT IS COMING FROM.
$0045-$0046 VARNAM VARIABLE'S NAME IS STORED HERE.
$0047-$0048 VARPNT POINTER TO VARIABLE IN MEMORY.
$0047 FDECPT POINTER INTO POWER OF TENS OF "FOUT".
$0049-$004A FORPNT A VARIABLE'S POINTER FOR "FOR" LOOPS
AND "LET" STATEMENTS.
$0049 LSTPNT PNTR TO LIST STRING.
$0049 ANDMSK THE MASK USED BY WAIT FOR ANDING.
$004A EORMSK THE MASK FOR EORING IN WAIT.
$004B-$004C OPPTR POINTER TO CURRENT OP'S ENTRY IN "OPTAB".
$004B VARTXT POINTER INTO LIST OF VARIABLES.
$004D OPMASK MASK CREATED BY CURRENT OPERATOR.
$004E-$004F DEFPNT POINTER USED IN FUNCTION DEFINITION.
$004E GRBPNT ANOTHER USED IN GARBAGE COLLECTION.
$004E TEMPF3 A THIRD FAC TEMPORARY (4 BYTES).
$0050-$0052 DSCPNT POINTER TO A STRING DESCRIPTOR.
$0053 FOUR6 VARIABLE CONSTANT USED BY GARB COLLECT.
$0054-$0056 JMPER
$0055 SIZE
$0056 OLDOV THE OLD OVERFLOW.
$0057 TEMPF1
$0058 HIGHDS DESINATION OF HIGHEST ELEMENT IN BLT.
$005A HIGHTR SOURCE OF HIGHEST ELEMENT TO MOVE.
$005C TEMPF2
$005D LOWDS LOCATION OF LAST BYTE TRANSFERRED INTO.
$005F LOWTR LAST THING TO MOVE IN BLT.
$0058 ARYPNT A POINTER USED IN ARRAY BUILDING.
$005F GRBTOP A POINTER USED IN GARBAGE COLLECTION.
$005D DECCNT NUMBER OF PLACES BEFORE DECIMAL POINT.
$005E TENEXP HAS A DPT BEEN INPUT?
$005F DPTFLG BASE TEN EXPONENT.
$0060 EXPSGN SIGN OF BASE TEN EXPONENT.
$0061-$0066 FAC THE FLOATING ACCUMULATOR
$0061 FACEXP
$0061 DSCTMP THIS IS WHERE TEMP DESCS ARE BUILT.
$0062 FACHO MOST SIGNIFICANT BYTE OF MANTISSA.
$0063 FACMOH ONE MORE.
$0064 FACMO MIDDLE ORDER OF MANTISSA.
$0064 INDICE INDICE IS SET UP HERE BY "QINT".
$0065 FACLO LEAST SIG BYTE OF MANTISSA.
$0066 FACSGN SIGN OF FAC (0 OR -1) WHEN UNPACKED.
$0067 SGNFLG SIGN OF FAC IS PRESERVED BERE BY "FIN".
$0067 DEGREE A COUNT USED BY POLYNOMIALS.
$0068 BITS SOMETHING FOR "SHIFTR" TO USE.
$0069 ARGEXP THE FLOATING ARGUMENT (UNPACKED)
$006A ARGHO
$006B ARGMOH
$006C ARGMO
$006D ARGLO
$006E ARGSGN
$006F ARISGN A SIGN REFLECTING THE RESULT.
$006F STRNG1 POINTER TO A STRING OR DESCRIPTOR.
$0070 FACOV OVERFLOW BYTE OF THE FAC.
$0071-$0072 FBUFPT POINTER INTO FBUFFR USED BY FOUT.
$0071 BUFPTR POINTER TO BUF USED BY "CRUNCH".
$0071 STRNG2 POINTER TO STRING OR DESC.
$0071 POLYPT POINTER INTO POLYNOMIAL COEFFICIENTS.
$0071 CURTOL ABSOLUTE LINEAR INDEX IS FORMED HERE.
$0073-$008A CHRGET RAM CODE.
THIS CODE GETS CHANGED THROUGHOUT EXECUTION.
IT IS MADE TO BE FAST THIS WAY.
ALSO, [X] AND [Y] ARE NOT DISTURBED
"CHRGET" USING [TXTPTR] AS THE CURRENT TEXT PNTR
FETCHES A NEW CHARACTER INTO ACCA AFTER INCREMENTING [TXTPTR]
AND SETS CONDITION CODES ACCORDING TO WHAT'S IN ACCA.
NOT C= NUMERIC ("0" THRU "9")
Z= ":" OR END-OF-LINE (A NULL)
[ACCA] = NEW CHAR.
[TXTPTR]=[TXTPTR]+1
THE FOLLOWING EXISTS IN ROM IF ROM EXISTS AND IS LOADED
DOWN HERE BY INIT. OTHERWISE IT IS JUST LOADED INTO THIS
RAM LIKE ALL THE REST OF RAM IS LOADED.
$008B-$008F RNDX
$0200 BUF TYPE IN STORED HERE.
DIRECT STATEMENTS EXECUTE OUT OF
HERE. REMEMBER "INPUT" SMASHES BUF.
MUST BE ON PAGE ZERO
OR ASSIGNMENT OF STRING
VALUES IN DIRECT STATEMENTS WON'T COPY
INTO STRING SPACE -- WHICH IT MUST.
N.B. TWO NONZERO BYTES MUST PRECEDE "BUFLNM".

View file

@ -22,7 +22,7 @@ names = [
'Programmer\'s Reference Guide',
'64map',
'Jim Butterfield',
'...',
'Microsoft/Commodore Source',
]
links = [
'http://unusedino.de/ec64/technical/project64/mapping_c64.html',
@ -32,7 +32,7 @@ links = [
'http://www.zimmers.net/cbmpics/cbm/c64/c64prg.txt',
'http://unusedino.de/ec64/technical/project64/memory_maps.html',
'https://www.atarimagazines.com/compute/issue29/394_1_COMMODORE_64_MEMORY_MAP.php',
'https://...',
'https://github.com/mist64/cbmsrc',
]
descriptions = [
'Reference from <i>Mapping the Commodore 64</i> by Sheldon Leemon, ISBN 0-942386-23-X.',
@ -42,7 +42,7 @@ descriptions = [
'Reference from <i>Commodore 64 Programmer\'s Reference Guide</i>.',
'Reference as found in "Commodore_64_Memory_Maps.txt" by anonymous.',
'Reference by Jim Butterfield in COMPUTE! #29 (October 1982).',
'...',
'Comments from the original M6502 BASIC source by Microsoft and the original C64 KERNAL source by Commodore',
]

View file

@ -1,33 +0,0 @@
#!/usr/bin/python3
import sys
import os
import pprint
with open('c64mem_src_basic.txt', 'r') as f:
lines = f.read().split('\n')
with open('basic_sym.txt', 'r') as f:
sym = f.read().split('\n')
symbols = {}
for s in sym:
address = s[0:4]
name = s[5:]
symbols[name] = address
pprint.pprint(symbols)
for line in lines:
if line.startswith(' '):
print(' ' + line)
continue
symbol = line[0:6].rstrip()
description = line[8:]
if symbol in symbols:
address = ('$' + symbols[symbol] + " ")
else:
address = "$???? "
print(address + (symbol + ' ')[:6] + ' ' + description)