mirror of
https://github.com/RevCurtisP/C02.git
synced 2024-11-21 10:32:08 +00:00
Updated and tested programs in test/ directory
This commit is contained in:
parent
7c64a32137
commit
9683509797
@ -23,8 +23,8 @@ DSTLO EQU $32 ;Destination String Pointer (string.a02)
|
||||
DSTHI EQU $33
|
||||
BLKLO EQU $34 ;Block Segment Pointer (block.a02)
|
||||
BLKHI EQU $35
|
||||
PTRLO EQU $35 ;System Pointer (pointer.a02)
|
||||
PTRHI EQU $36
|
||||
STKLO EQU $35 ;System Pointer (pointer.a02)
|
||||
STKHI EQU $36
|
||||
|
||||
RDSEED EQU $3E ;Pseudo-RANDOM Seed
|
||||
RANDOM EQU $3F ;Pseudo-RANDOM Number Storage
|
||||
@ -34,12 +34,15 @@ TEMP1 EQU $41
|
||||
TEMP2 EQU $42
|
||||
TEMP3 EQU $43
|
||||
|
||||
BLKSLO EQU $4A ;Block Start Address
|
||||
BLKSHI EQU $4B
|
||||
BLKELO EQU $4C ;Block End Address
|
||||
BLKEHI EQU $4D
|
||||
BLKLEN EQU $4E ;Block Segment Length
|
||||
|
||||
BLKLEN EQU $47 ;Block Segment Length
|
||||
BLKSLO EQU $48 ;Block Start Address
|
||||
BLKSHI EQU $49
|
||||
BLKELO EQU $4A ;Block End Address
|
||||
BLKEHI EQU $4B
|
||||
STKSLO EQU $4C ;Stack Start Address
|
||||
STKSHI EQU $4D
|
||||
STKELO EQU $4E ;Stack End Address
|
||||
STKEHI EQU $4F
|
||||
|
||||
;PIA 6820 Registers
|
||||
KBD EQU $D010 ;Keyboard Data
|
||||
@ -56,8 +59,7 @@ PRHEX EQU $FFE5 ;Subroutine - Print Low Nybble of Accumulator as Hex Digit
|
||||
|
||||
START: LDX #$FF ;Reset stack - the monitor doesn't do this
|
||||
TXS ; (probably because of lack of space)
|
||||
LDA #$0D ;Move cursor to next line before
|
||||
JSR ECHO ; executing program
|
||||
JSR NEWLIN ;Move cursor to next line before executing program
|
||||
JMP MAIN ;Execute Program
|
||||
|
||||
|
||||
@ -91,19 +93,3 @@ DELCHR: LDA #DELKEY ;Load Underscore Character
|
||||
;Advance Character to Next line
|
||||
NEWLIN: LDA #$0D ;Load C/R into Accumulator
|
||||
JMP PRCHR ; and Print it
|
||||
|
||||
;Initialize Destination String Pointer and Index
|
||||
SETDST: STX DSTLO ;Save Destination String Pointer
|
||||
STY DSTHI
|
||||
RTS
|
||||
|
||||
;Initialize Source String Pointer and Index
|
||||
SETSRC: STX SRCLO ;Save Source String Pointer
|
||||
STY SRCHI
|
||||
LDY #$00 ;Initialize Index Into String
|
||||
RTS
|
||||
|
||||
;Retrieve Source String Pointer
|
||||
GETSRC: LDX SRCLO
|
||||
LDY SRCHI
|
||||
RTS
|
||||
|
@ -8,16 +8,24 @@ char ysave; //Y Register Storage
|
||||
char mode; //Mode: Store, Examine, Block Examine
|
||||
char buffer[]; //Input Buffer
|
||||
|
||||
//Platform Specific Constants
|
||||
#define DELKEY $5F //Delete/Backspace Key
|
||||
#define ESCKEY $1B //Escape/Stop Key
|
||||
#define RTNKEY $0D //Return/Enter Key
|
||||
|
||||
/* Standard Library Variables */
|
||||
char srclo,srchi; //Source String Pointer for Library Functions
|
||||
char dstlo,dsthi; //Destination String Pointer for Library Functions
|
||||
char blklo,blkhi; //Block Segment Pointer
|
||||
char ptrlo,ptrhi; //System Pointer
|
||||
char stklo,skthi; //System Pointer
|
||||
|
||||
char blkslo, blkshi; //Block Start Address
|
||||
char blkelo, blkehi; //Block End Address
|
||||
char blklen; //Block Segment Length
|
||||
|
||||
char stkslo, stkshi; //Stack Start Address
|
||||
char stkelo, stkehi; //Stack End Address
|
||||
|
||||
char temp0, temp1, temp2, temp3; //Temporary Variables
|
||||
|
||||
//PIA 6820 Registers
|
||||
|
@ -7,7 +7,7 @@
|
||||
#define NULKEY $00 //No Key was Pressed
|
||||
|
||||
/* Zero Page Variables used as Pointers */
|
||||
char strlo,strhi; //String pointer for String and I/O functions
|
||||
char srclo,srchi; //String pointer for String and I/O functions
|
||||
char dstlo,dsthi; //Secondary string pointer for String functions
|
||||
|
||||
char temp0,temp1,temp2,temp3; //Temporary variables
|
||||
|
@ -4,7 +4,6 @@
|
||||
#define DELKEY $08 //Delete/Backspace Key
|
||||
#define ESCKEY $1B //Escape/Stop Key
|
||||
#define RTNKEY $0D //Return/Enter Key
|
||||
#define NULKEY $00 //No Key was Pressed
|
||||
|
||||
//Library Pointer Variables
|
||||
char srclo,srchi; //Source String Pointer for Library Functions
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*********************************************
|
||||
* stdlib - Template Library Routines for C02 *
|
||||
*********************************************/
|
||||
/************************************************
|
||||
* template - Template Library Routines for C02 *
|
||||
************************************************/
|
||||
|
||||
/* Function Description *
|
||||
* Args: a - First Argument *
|
||||
|
@ -38,27 +38,8 @@ USER13 EQU $03FD ;Free Byte for User Programs
|
||||
USER14 EQU $03FE ;Free Byte for User Programs
|
||||
USER15 EQU $03FF ;Free Byte for User Programs
|
||||
|
||||
;Cakculated Addresses
|
||||
BASICX EQU BASIC+$0B ;End of Basic Program
|
||||
|
||||
;Machine Language Basic Stub
|
||||
ORG BASIC ;Start
|
||||
DC <BASICX, >BASICX ; Pointer to Next Line
|
||||
DC $00, $00 ; Line Number (0)
|
||||
DC $9E ; SYS
|
||||
DC $20 ; ' '
|
||||
DC SYSADR ; "addr"
|
||||
DC $00 ;End of Line Marker
|
||||
DC $00, $00 ;End of Basic Program
|
||||
|
||||
START: TSX ;Get Stack Pointer
|
||||
STX STKSAV ;and Save for Exit
|
||||
; LDA #$0E ;Switch to Upper/Lower Case
|
||||
; JSR PRCHR
|
||||
; LDA #$08 ;Disable Commodore+Shift
|
||||
; JSR PRCHR
|
||||
; LDA #$93 ;Clear Screen
|
||||
; JSR PRCHR
|
||||
JMP MAIN ;Execute Program
|
||||
|
||||
EXIT: LDX STKSAV ;Retrieve Saved Stack Pointer
|
||||
|
@ -5,8 +5,14 @@ VICSCN EQU $1E00 ;Video Screen Memory Area (Unexpanded)
|
||||
CHRROM EQU $8000 ;Character Generator ROM
|
||||
VICCLR EQU $9600 ;COLOR RAM (UNEXPANDED)
|
||||
|
||||
;BASIC Stub Constants
|
||||
BASIC EQU $1001 ;Start of BASIC Program
|
||||
SYSADR EQM "4110" ;M/L SYS Address
|
||||
;Machine Language Basic Stub
|
||||
ORG $1001 ;Start of Basic Program
|
||||
BASIC: DC $0C, $10 ;Pointer to Next Line
|
||||
DC $00, $00 ;Line Number (0)
|
||||
DC $9E ;SYS
|
||||
DC $20 ;' '
|
||||
DC $34,$31,$31,$30 ;"4110"
|
||||
DC $00 ;End of Line Marker
|
||||
DC $00, $00 ;End of Basic Program
|
||||
|
||||
INCLUDE "../include/vic.a02" ;Include VIC 20 Common Code
|
||||
|
@ -5,8 +5,14 @@ VICSCN EQU $1E00 ;Video Screen Memory Area (Unexpanded)
|
||||
CHRROM EQU $8000 ;Character Generator ROM
|
||||
VICCLR EQU $9600 ;Color RAM (Unexpanded)
|
||||
|
||||
;BASIC Stub Constants
|
||||
BASIC EQU $0401 ;Start of BASIC Program
|
||||
SYSADR EQM "1038" ;M/L SYS Address
|
||||
;Machine Language Basic Stub
|
||||
ORG $0401 ;Start of Basic Program
|
||||
BASIC: DC $0C, $04 ;Pointer to Next Line
|
||||
DC $00, $00 ;Line Number (0)
|
||||
DC $9E ;SYS
|
||||
DC $20 ;' '
|
||||
DC $31,$30,$33,$38 ;"1038"
|
||||
DC $00 ;End of Line Marker
|
||||
DC $00, $00 ;End of Basic Program
|
||||
|
||||
INCLUDE "../include/vic.a02" ;Include VIC 20 Common Code
|
||||
|
@ -5,8 +5,14 @@ VICSCN EQU $1000 ;Video Screen Memory Area (Unexpanded)
|
||||
CHRROM EQU $8000 ;Character Generator ROM
|
||||
VICCLR EQU $9400 ;Color RAM (Unexpanded)
|
||||
|
||||
;BASIC Stub Constants
|
||||
BASIC EQU $1201 ;Start of BASIC Program
|
||||
SYSADR EQM "4622" ;M/L SYS Address
|
||||
;Machine Language Basic Stub
|
||||
ORG $1201 ;Start of Basic Program
|
||||
BASIC: DC $0C, $12 ;Pointer to Next Line
|
||||
DC $00, $00 ;Line Number (0)
|
||||
DC $9E ;SYS
|
||||
DC $20 ;' '
|
||||
DC $34,$36,$32,$32 ;"4622"
|
||||
DC $00 ;End of Line Marker
|
||||
DC $00, $00 ;End of Basic Program
|
||||
|
||||
INCLUDE "../include/vic.a02" ;Include VIC 20 Common Code
|
||||
|
31
test/_files.txt
Normal file
31
test/_files.txt
Normal file
@ -0,0 +1,31 @@
|
||||
C02/Test/ - C02 Compiler Test & Demonstration Programs
|
||||
|
||||
Batch Files - Compile and assemble programs for specific systems
|
||||
|
||||
A1.BAT Apple 1 - Creates .ASC file (Woz Monitor Format, 0300R to Run)
|
||||
A2.BAT Apple 2 - Creates .DSK file (Bootable Disk Image)
|
||||
O1.BAT Oric-1 - Creates .TAP file (Oriculator Tape Image)
|
||||
P65.BAT py65mon - Creates .BIN file (Binary file, Load and Run at 0200)
|
||||
V8K.BAT VIC+8K - Creates .PRG file (Program File with BASIC stub)
|
||||
|
||||
Auxillary Files - Used by Batch Files
|
||||
|
||||
s2boot.dsk Apple 2 Bootable Disk Image - Used by A2.BAT
|
||||
xvic.ini VICE Configuration - Used bu V8K.BAT
|
||||
|
||||
C02 Test & Demonstration Files
|
||||
|
||||
echo.c02 Echo typed keys to screen
|
||||
echohex.c02 Display ASCII code of typed keys in Hexadecimal
|
||||
|
||||
conds.c02 Test C02 Conditional Expressions
|
||||
funcs.c02 Test C02 Function Calls and Parameter Passing
|
||||
loops.c02 Test C02 Loop Structures
|
||||
|
||||
forforpf.c02 Demo of printf function from "stringx" module
|
||||
strings.c02 Demo of standard library "string" module
|
||||
|
||||
testhdr.c02 Test system specific Header file functions
|
||||
testsd.c02 Test module "stddef" functions
|
||||
testsl.c02 Test module "stdlib" functions
|
||||
testiox.c02 Test module "stdiox" functions
|
22
test/a1.bat
Normal file
22
test/a1.bat
Normal file
@ -0,0 +1,22 @@
|
||||
@ECHO OFF
|
||||
REM Compile and Assemble Program for Apple-1
|
||||
IF EXIST %1.c02 GOTO COMPILE
|
||||
ECHO File %1.c02 not found
|
||||
EXIT /B
|
||||
|
||||
:COMPILE
|
||||
ECHO Compiling File %1.c02
|
||||
..\c02.exe -h apple1 %1 >%1.dbg
|
||||
IF ERRORLEVEL 1 EXIT /B
|
||||
|
||||
ECHO Assembling File %1.asm
|
||||
dasm %1.asm -f1 -o%1.obj -l%1.lst -s%1.sym
|
||||
IF ERRORLEVEL 1 EXIT /B
|
||||
|
||||
ECHO Converting Object File
|
||||
python ..\util\bin2asc.py %1
|
||||
IF ERRORLEVEL 1 EXIT /B
|
||||
DEL %1.obj
|
||||
|
||||
ECHO Copying ASCII File
|
||||
COPY %1.asc C:\Programs\pom1\asc\%1.asc
|
23
test/a2.bat
Normal file
23
test/a2.bat
Normal file
@ -0,0 +1,23 @@
|
||||
@ECHO OFF
|
||||
IF EXIST %1.c02 GOTO COMPILE
|
||||
ECHO File %1.c02 not found
|
||||
EXIT /B
|
||||
|
||||
:COMPILE
|
||||
ECHO Compiling File %1.c02
|
||||
..\c02.exe -h apple2 %1 >%1.dbg
|
||||
IF ERRORLEVEL 1 EXIT /B
|
||||
|
||||
ECHO Assembling File %1.asm
|
||||
dasm %1.asm -f3 -o%1.obj -l%1.lst -s%1.sym
|
||||
IF ERRORLEVEL 1 EXIT /B
|
||||
|
||||
ECHO Building Disk Image
|
||||
COPY /Y a2boot.dsk %1.dsk
|
||||
ECHO BRUN %1 |python -c "print(input().upper())" |a2tools in t %1.dsk command
|
||||
a2tools in b.0C00 %1.dsk %1 %1.obj
|
||||
IF ERRORLEVEL 1 EXIT /B
|
||||
DEL %1.obj
|
||||
|
||||
ECHO Starting Emulator
|
||||
START C:\Programs\AppleWin\applewin -d1 %1.dsk
|
67
test/conds.c02
Normal file
67
test/conds.c02
Normal file
@ -0,0 +1,67 @@
|
||||
/****************************************
|
||||
* CONDS - Test Conditional Expressions *
|
||||
****************************************/
|
||||
|
||||
//Specify System Header using -H option
|
||||
#include <stddef.h02>
|
||||
#include <stdlib.h02>
|
||||
#include <stdio.h02>
|
||||
|
||||
char allok;
|
||||
|
||||
main:
|
||||
|
||||
allok = #TRUE;
|
||||
|
||||
putln("Test Conditionals");
|
||||
|
||||
puts(" 1<>1"); if (1<>1) failed(); else passed();
|
||||
puts(" 1<>2"); if (1<>2) passln(); else failln();
|
||||
puts(" 1==1"); if (1==1) passed(); else failed();
|
||||
puts(" 1==2"); if (1==2) failln(); else passln();
|
||||
puts("1+1=2"); if (1+1 == 2) passed(); else failed();
|
||||
puts(" 2<1"); if (2<1) failln(); else passln();
|
||||
puts(" 1<1"); if (1<1) failed(); else passed();
|
||||
puts(" 1<2"); if (1<2) passln(); else failln();
|
||||
|
||||
puts(" 1<=1"); if (1<=1) passed(); else failed();
|
||||
puts(" 1<=2"); if (1<=2) passln(); else failln();
|
||||
puts(" 2<=1"); if (2<=1) failed(); else passed();
|
||||
puts(" 2>1"); if (2>1) passln(); else failln();
|
||||
puts(" 1>1"); if (1>1) failed(); else passed();
|
||||
puts(" 1>2"); if (1>2) failln(); else passln();
|
||||
puts(" 1>=1"); if (1>=1) passed(); else failed();
|
||||
puts(" 1>=2"); if (1>=2) failln(); else passln();
|
||||
puts(" 2>=1"); if (2>=1) passed(); else failed();
|
||||
puts(" !0:+"); if (!0:+) failln(); else passln();
|
||||
|
||||
puts("$FF:+"); if ($FF:+) failed(); else passed();
|
||||
puts(" $FF"); if ($FF) passln(); else failln();
|
||||
puts("$FF:-"); if ($FF:-) passed(); else failed();
|
||||
puts(" !$FF"); if (!$FF) failln(); else passln();
|
||||
puts("$00:+"); if ($00:+) passed(); else failed();
|
||||
puts(" $00"); if ($00) failln(); else passln();
|
||||
puts("$00:-"); if ($00:-) failed(); else passed();
|
||||
puts(" !$00"); if (!$00) passln(); else failln();
|
||||
|
||||
puts(" 1!0"); if (1|0) passed(); else failed();
|
||||
puts(" !1!0"); if (!1|0) failln(); else passln();
|
||||
puts(" 1&0"); if (1&0) failed(); else passed();
|
||||
puts(" !1&0"); if (!1&0) passln(); else failln();
|
||||
puts(" 1^1"); if (1^1) failed(); else passed();
|
||||
puts(" !1^1"); if (!1^1) passln(); else failln();
|
||||
|
||||
puts(" atoc(\"0\")"); if (atoc("0")) failln(); else passln();
|
||||
puts(" atoc(\"1\")"); if (atoc("1")) passln(); else failln();
|
||||
puts(" atoc(\"127\"):+"); if (atoc("127"):+) passln(); else failln();
|
||||
puts(" atoc(\"128\"):-"); if (atoc("128"):-) passln(); else failln();
|
||||
|
||||
if (allok) putln("All Tests Passed");
|
||||
getc();
|
||||
|
||||
goto exit;
|
||||
|
||||
void passed() {puts(" Pass");}
|
||||
void passln() {passed(); newlin();}
|
||||
void failed() {puts(" Fail"); allok = #FALSE;}
|
||||
void failln() {failed(); newlin();}
|
17
test/echohex.c02
Normal file
17
test/echohex.c02
Normal file
@ -0,0 +1,17 @@
|
||||
/*******************************************************
|
||||
* ECHOHEX - Test/Demo program for C02 Standard Header *
|
||||
* Displays ASCII Code of Typed Keys to Screen *
|
||||
* ESCAPE/STOP key Ends Program *
|
||||
*******************************************************/
|
||||
|
||||
//Specify System Header using -H option
|
||||
|
||||
char key; //Key value
|
||||
|
||||
main:
|
||||
while() {
|
||||
key = rdkey();
|
||||
prbyte(key);
|
||||
prchr(' ');
|
||||
if (key==#ESCKEY) goto exit;
|
||||
}
|
20
test/forforpf.c02
Normal file
20
test/forforpf.c02
Normal file
@ -0,0 +1,20 @@
|
||||
/******************************************
|
||||
* FORFORPF - Test Nested FOR with PRINTF *
|
||||
******************************************/
|
||||
|
||||
//Specify System Header using -H option
|
||||
#include <stddef.h02>
|
||||
#include <stdlib.h02>
|
||||
#include <stdio.h02>
|
||||
#include <stdiox.h02>
|
||||
|
||||
char i,j,result;
|
||||
main:
|
||||
for (i=0;i<5;i++) {
|
||||
for (j=0;j<5;j++) {
|
||||
result=div(mult(mult(i,5)+j,3),5)+32; //(i*5+j)*3/5+32;
|
||||
printf(result,"%d ");
|
||||
}
|
||||
newlin();
|
||||
}
|
||||
goto exit;
|
71
test/funcs.c02
Normal file
71
test/funcs.c02
Normal file
@ -0,0 +1,71 @@
|
||||
/*******************************
|
||||
* FUNCS - Test Function Calls *
|
||||
*******************************/
|
||||
|
||||
//Specify System Header using -H option
|
||||
#include <stddef.h02>
|
||||
#include <stdlib.h02>
|
||||
#include <stdio.h02>
|
||||
#include <stdiox.h02>
|
||||
|
||||
char i; //index value
|
||||
char n; //result of function call
|
||||
char s[128]; //for Numeric to String conversions
|
||||
char z; //Function Parameters
|
||||
|
||||
const char passed = " Passed.";
|
||||
const char failed = " Failed.";
|
||||
|
||||
main:
|
||||
|
||||
for (i=1;i<5;i++) test(i);
|
||||
putln("Testing complete.");
|
||||
|
||||
goto exit;
|
||||
|
||||
//Test Use of Variable as Parameter
|
||||
void test(z) {
|
||||
select(z) {
|
||||
case 1: test1();
|
||||
case 2: test2();
|
||||
case 3: test3();
|
||||
case 4: test4();
|
||||
default: printf(z, "Bad test value %d\n.");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void test1() {
|
||||
puts("atoc(\"1\") = ");
|
||||
n = atoc("1");
|
||||
prtnum(n); checkn(1);
|
||||
}
|
||||
|
||||
void test2() {
|
||||
puts("atoc(\"2\") = ");
|
||||
n = atoc("2");
|
||||
prtnum(n); checkn(2);
|
||||
}
|
||||
|
||||
void test3() {
|
||||
puts("atoc(\"1\") + 2 = ");
|
||||
n = atoc("1") + 2;
|
||||
prtnum(n); checkn(3);
|
||||
}
|
||||
|
||||
void test4() {
|
||||
puts("abs(atoc(\"255\") + 7 = ");
|
||||
n = abs(atoc("255")) + 7;
|
||||
prtnum(n); checkn(8);
|
||||
}
|
||||
|
||||
|
||||
//uses explicit passing of accumulator
|
||||
void checkn() {if (A == n) pass(); else fail();}
|
||||
|
||||
//uses implicit passing of accumulator
|
||||
void prtnum() {ctoa(&s); puts(&s); putc(':');}
|
||||
|
||||
//one more level of function calls - just because
|
||||
void pass() {putln(&passed);}
|
||||
void fail() {putln(&failed);}
|
@ -2,11 +2,12 @@
|
||||
* LOOPS - Test C02 Loop Structures *
|
||||
************************************/
|
||||
|
||||
#include <py65.h02>
|
||||
//Specify System Header using -H option
|
||||
#include <stddef.h02>
|
||||
#include <stdio.h02>
|
||||
|
||||
char i, b;
|
||||
char failed = " Test Failed!";
|
||||
const char failed = " Test Failed!";
|
||||
|
||||
main:
|
||||
|
||||
|
@ -13,7 +13,7 @@ ECHO Assembling File %1.asm
|
||||
dasm %1.asm -f1 -o%1.obj -l%1.lst -s%1.sym
|
||||
IF ERRORLEVEL 1 EXIT /B
|
||||
|
||||
ECHO Building Disk Image
|
||||
ECHO Building Tape Image
|
||||
python ..\util\orictap.py %1
|
||||
IF ERRORLEVEL 1 EXIT /B
|
||||
DEL %1.obj
|
||||
|
15
test/p65.bat
Normal file
15
test/p65.bat
Normal file
@ -0,0 +1,15 @@
|
||||
@ECHO OFF
|
||||
IF EXIST %1.c02 GOTO COMPILE
|
||||
ECHO File %1.c02 not found
|
||||
GOTO EOF
|
||||
|
||||
:COMPILE
|
||||
@ECHO Compiling File %1.c02 for py65mon
|
||||
..\c02.exe -h py65 %1 >%1.dbg
|
||||
|
||||
IF %ERRORLEVEL% NEQ 0 GOTO EOF
|
||||
|
||||
@ECHO Assembling File %1.asm
|
||||
C:\Programs\dasm %1.asm -f3 -o%1.bin -l%1.lst -s%1.sym
|
||||
|
||||
:EOF
|
103
test/strings.c02
103
test/strings.c02
@ -2,40 +2,47 @@
|
||||
* STRINGS - Demonstrate string.h02 functions *
|
||||
**********************************************/
|
||||
|
||||
#include <py65.h02>
|
||||
#include <stdio.h02>
|
||||
//Specify System Header using -H option
|
||||
#include <stddef.h02>
|
||||
#include <stdlib.h02>
|
||||
#include <stdio.h02>
|
||||
#include <string.h02>
|
||||
#include <stringx.h02>
|
||||
|
||||
char slen, scmp, spos;
|
||||
char s1 = "First string.";
|
||||
char s2 = "Second string.";
|
||||
char stest = "123456789012345678901234567890";
|
||||
const char s1 = "FIRST STRING.";
|
||||
const char s2 = "SECOND STRING.";
|
||||
const char stest = "123456789012345678901234567890";
|
||||
char stemp[32];
|
||||
char sless = "This string is less.";
|
||||
char smore = "This string is more.";
|
||||
const char smore = "THIS STRING IS MORE.";
|
||||
const char sless = "THIS STRING IS LESS.";
|
||||
char sprt[4];
|
||||
char pass = "Pass";
|
||||
char fail = "Fail";
|
||||
const char pass = "PASS";
|
||||
const char fail = "FAIL";
|
||||
|
||||
void anykey() {
|
||||
putln("*PRESS A KEY*");
|
||||
if (getkey() == #ESCKEY) goto exit;
|
||||
newlin();
|
||||
}
|
||||
|
||||
main:
|
||||
//Demo strchr(), strrch()
|
||||
putln(&s1); //Print s1 to screen
|
||||
puts("Position of first 's' is: ");
|
||||
spos = strchr('s', &s1); //Get position of 's'
|
||||
puts("POSITION OF FIRST 'S' IS: ");
|
||||
spos = strchr('S', &s1); //Get position of 's'
|
||||
ctoa(spos, &sprt); //Convert to string
|
||||
putln(&sprt); //Print position to screen
|
||||
puts("Position of first 'x' is: ");
|
||||
spos = strchr('x', &s1); //Get position of 's'
|
||||
puts("POSITION OF FIRST 'X' IS: ");
|
||||
spos = strchr('X', &s1); //Get position of 's'
|
||||
ctoa(spos, &sprt); //Convert to string
|
||||
putln(&sprt); //Print position to screen
|
||||
puts("Position of last 's' is: ");
|
||||
spos = strrch('s', &s1); //Get position of 's'
|
||||
puts("POSITION OF LAST 'S' IS: ");
|
||||
spos = strrch('S', &s1); //Get position of 's'
|
||||
ctoa(spos, &sprt); //Convert to string
|
||||
putln(&sprt); //Print position to screen
|
||||
puts("Position of last 'x' is: ");
|
||||
spos = strrch('x', &s1); //Get position of 's'
|
||||
puts("POSITION OF LAST 'X' IS: ");
|
||||
spos = strrch('X', &s1); //Get position of 's'
|
||||
ctoa(spos, &sprt); //Convert to string
|
||||
putln(&sprt); //Print position to screen
|
||||
newlin();
|
||||
@ -44,61 +51,65 @@ main:
|
||||
putln(&stest); //Print stest to screen
|
||||
slen = strlen(&stest); //Get string length
|
||||
ctoa(slen, &sprt); //Convert to string
|
||||
puts("Length of string is ");
|
||||
puts("LENGTH OF STRING IS ");
|
||||
putln(&sprt); //Print length to screen
|
||||
newlin();
|
||||
|
||||
//Demo setstr();
|
||||
strdst(&stemp); //Set stemp as destination street
|
||||
puts("Address of stemp is $");
|
||||
puts("ADDRESS OF STEMP IS $");
|
||||
prbyte(dsthi); //Print stored address to string
|
||||
prbyte(dstlo);
|
||||
newlin();
|
||||
newlin();
|
||||
|
||||
anykey();
|
||||
|
||||
//Demo strcpy()
|
||||
putln("Copying s1 to stemp: ");
|
||||
strdst(&stemp); //Set Destination String
|
||||
slen = strcpy(&s1); //Copy s1 into Destination String
|
||||
puts("String stemp contains: ");
|
||||
putln(&stemp); //Print stest to screen
|
||||
ctoa(slen, &sprt); //Convert to string
|
||||
puts("Total characters copied: ");
|
||||
putln(&sprt); //Print length to screen
|
||||
putln("COPYING S1 TO STEMP: ");
|
||||
strdst(&stemp); //Set Destination String
|
||||
slen = strcpy(&s1); //Copy s1 into Destination String
|
||||
puts("STRING STEMP CONTAINS: ");
|
||||
putln(&stemp); //Print stest to screen
|
||||
ctoa(slen, &sprt); //Convert to string
|
||||
puts("TOTAL CHARACTERS COPIED: ");
|
||||
putln(&sprt); //Print length to screen
|
||||
newlin();
|
||||
|
||||
//Demo strcat()
|
||||
putln("Concatenating s2 to stemp: ");
|
||||
strdst(&stemp); //Set Destination String
|
||||
slen = strcat(&s2); //Copy s1 into Destination String
|
||||
puts("String stemp contains: ");
|
||||
putln(&stemp); //Print stest to screen
|
||||
ctoa(slen, &sprt); //Convert to string
|
||||
puts("Length of concatenated string is ");
|
||||
putln(&sprt); //Print length to screen
|
||||
putln("CONCATENATING S2 TO STEMP: ");
|
||||
strdst(&stemp); //Set Destination String
|
||||
slen = strcat(&s2); //Copy s1 into Destination String
|
||||
putln("STRING STEMP CONTAINS: ");
|
||||
puts(" "); putln(&stemp); //Print stest to screen
|
||||
ctoa(slen, &sprt); //Convert to string
|
||||
puts("LENGTH OF CONCATENATED STRING IS ");
|
||||
putln(&sprt); //Print length to screen
|
||||
newlin();
|
||||
|
||||
//Demo strcut()
|
||||
putln("Cutting s2 at position 7 to stemp: ");
|
||||
putln("CUTTING S2 AT POSITION 7 TO STEMP: ");
|
||||
strdst(&stemp); //Set Destination String
|
||||
slen = strcut(7, &s2); //Copy s1 into Destination String
|
||||
puts("String stemp contains: ");
|
||||
puts("STRING STEMP CONTAINS: ");
|
||||
putln(&stemp); //Print stest to screen
|
||||
ctoa(slen, &sprt); //Convert to string
|
||||
puts("Length of cut string is ");
|
||||
puts("LENGTH OF CUT STRING IS ");
|
||||
putln(&sprt); //Print length to screen
|
||||
newlin();
|
||||
|
||||
anykey();
|
||||
|
||||
//Demo strcmp();
|
||||
puts("Comparing sless to smore: ");
|
||||
puts("COMPARING SLESS TO SMORE: ");
|
||||
strdst(&sless);
|
||||
scmp = strcmp(&smore);
|
||||
prbyte(scmp); newlin();
|
||||
puts("Comparing sless to sless: ");
|
||||
puts("COMPARING SLESS TO SLESS: ");
|
||||
strdst(&sless);
|
||||
scmp = strcmp(&sless);
|
||||
prbyte(scmp); newlin();
|
||||
puts("Comparing smore to sless: ");
|
||||
puts("COMPARING SMORE TO SLESS: ");
|
||||
strdst(&smore);
|
||||
scmp = strcmp(&sless);
|
||||
prbyte(scmp); newlin();
|
||||
@ -106,17 +117,17 @@ main:
|
||||
|
||||
//Demo strspn();
|
||||
putln(&stest); //Print test to screen
|
||||
puts("Span matching \"0123\" is: ");
|
||||
puts("SPAN MATCHING \"0123\" IS: ");
|
||||
strdst(&stest); //Set string to search
|
||||
slen = strspn("0123"); //Get position of "123"
|
||||
ctoa(slen, &sprt); //Convert to string
|
||||
putln(&sprt); //Print position to screen
|
||||
puts("Span matching \"0123456789\" is: ");
|
||||
puts("SPAN MATCHING \"0123456789\" IS: ");
|
||||
strdst(&stest); //Set string to search
|
||||
slen = strspn("0123456789"); //Get position of "123"
|
||||
ctoa(slen, &sprt); //Convert to string
|
||||
putln(&sprt); //Print position to screen
|
||||
puts("Span matching \"789\" is: ");
|
||||
puts("SPAN MATCHING \"789\" IS: ");
|
||||
strdst(&stest); //Set string to search
|
||||
slen = strspn("789"); //Get position of "123"
|
||||
ctoa(slen, &sprt); //Convert to string
|
||||
@ -125,12 +136,14 @@ main:
|
||||
|
||||
//Demo strstr();
|
||||
putln(&stest); //Print test to screen
|
||||
puts("Position of \"234\" is: ");
|
||||
puts("POSITION OF \"234\" IS: ");
|
||||
strdst(&stest); //Set string to search
|
||||
spos = strstr("234"); //Get position of "123"
|
||||
ctoa(spos, &sprt); //Convert to string
|
||||
putln(&sprt); //Print position to screen
|
||||
newlin();
|
||||
|
||||
newlin();
|
||||
|
||||
goto exit;
|
||||
|
||||
|
21
test/testhdr.c02
Normal file
21
test/testhdr.c02
Normal file
@ -0,0 +1,21 @@
|
||||
/**************************************************
|
||||
* TESTHDR - Test C02 system specific Header file *
|
||||
**************************************************/
|
||||
|
||||
|
||||
//use -h option on command line
|
||||
|
||||
main:
|
||||
|
||||
prchr('P');
|
||||
prchr('R');
|
||||
prchr('C');
|
||||
prchr('H');
|
||||
prchr('R');
|
||||
newlin();
|
||||
|
||||
getkey();
|
||||
newlin();
|
||||
|
||||
goto exit;
|
||||
|
79
test/testiox.c02
Normal file
79
test/testiox.c02
Normal file
@ -0,0 +1,79 @@
|
||||
/***********************************************
|
||||
* TESTIOX - Test Library stdiox.h for py65mon *
|
||||
***********************************************/
|
||||
|
||||
//Specify System Header using -H option
|
||||
#include <stddef.h02>
|
||||
#include <stdlib.h02>
|
||||
#include <stdio.h02>
|
||||
#include <stdiox.h02>
|
||||
|
||||
char i, j;
|
||||
const char s = "STRING";
|
||||
|
||||
main:
|
||||
|
||||
getcpr("PRESS A KEY TO BEGIN");
|
||||
|
||||
i = 0;
|
||||
|
||||
putln("PRTDEC()");
|
||||
do {
|
||||
putdec(i);
|
||||
putc(':');
|
||||
i++;
|
||||
if (!i&7) newlin();
|
||||
if (!i&127) anykey();
|
||||
} while (i);
|
||||
|
||||
putln("PRTDEL()");
|
||||
do {
|
||||
putdel(i);
|
||||
putc(':');
|
||||
i++;
|
||||
if (!i&7) newlin();
|
||||
if (!i&127) anykey();
|
||||
} while (i);
|
||||
|
||||
putln("PRTDER()");
|
||||
do {
|
||||
putder(i);
|
||||
putc(':');
|
||||
i++;
|
||||
if (!i&7) newlin();
|
||||
if (!i&127) anykey();
|
||||
} while (i);
|
||||
|
||||
putln("PRTHEX()");
|
||||
do {
|
||||
puthex(i);
|
||||
putc(':');
|
||||
i++;
|
||||
if (!i&7) newlin();
|
||||
if (!i&127) anykey();
|
||||
} while (i);
|
||||
|
||||
putln("PRTWRD()");
|
||||
do {
|
||||
j = i ^ $FF;
|
||||
putwrd(*,i,j);
|
||||
putc(':');
|
||||
i++;
|
||||
if (!i&3) newlin();
|
||||
if (!i&63) anykey();
|
||||
} while (i);
|
||||
|
||||
do {
|
||||
if (!i&15) putln("%C %H .%R %L. %D%%");
|
||||
if (i<32) printf(i, " %h %r %l %d%%%n");
|
||||
else printf(i," %c %h %r %l %d%%%n");
|
||||
i++; if (!i&15) anykey();
|
||||
} while (i<128);
|
||||
|
||||
putln("%W.. '%S'");
|
||||
setdst(&s);
|
||||
printf("%w '%s'%n");
|
||||
|
||||
done:
|
||||
goto exit;
|
||||
|
82
test/testsd.c02
Normal file
82
test/testsd.c02
Normal file
@ -0,0 +1,82 @@
|
||||
/************************************************
|
||||
* TESTSD - Test Library stddef.h02 for py65mon *
|
||||
************************************************/
|
||||
|
||||
|
||||
//use -h option on command line
|
||||
#include <stddef.h02>
|
||||
|
||||
const char txtstr = {
|
||||
"#TRUE=",", #FALSE=",
|
||||
"SAVREG($A,$B,$C)", " TEMP0,1,2=",
|
||||
"RESREG()", " A,X,Y=",
|
||||
"SETSRC(&$1234)"," SRCLO,HI=", " GETSRC()=",
|
||||
"SETDST(&$5678)"," DSTLO,HI=", " GETDST()="
|
||||
};
|
||||
char txtidx;
|
||||
|
||||
char aa,xx,yy;
|
||||
|
||||
main:
|
||||
txtidx = 0;
|
||||
newlin();
|
||||
|
||||
prttxt(); prbyte(#TRUE);
|
||||
prttxt(); prbyte(#FALSE);
|
||||
newlin(); newlin();
|
||||
|
||||
temp0=0; temp1=0; temp3 = 0;
|
||||
prtlin(); savreg($A,$B,$C);
|
||||
prttxt(); prbyte(temp0);
|
||||
prtcma(); prbyte(temp1);
|
||||
prtcma(); prbyte(temp2);
|
||||
newlin();
|
||||
|
||||
setreg(0,0,0);
|
||||
prtlin(); aa,yy,xx = resreg();
|
||||
prttxt(); prbyte(aa);
|
||||
prtcma(); prbyte(yy);
|
||||
prtcma(); prbyte(xx);
|
||||
newlin(); newlin();
|
||||
|
||||
|
||||
srclo = 0; srchi = 0;
|
||||
prtlin(); setsrc(&$1234);
|
||||
prttxt(); prbyte(srclo);
|
||||
prtcma(); prbyte(srchi);
|
||||
newlin();
|
||||
prttxt(); setreg(0,0,0);
|
||||
getsrc(); prtwrd();
|
||||
newlin(); newlin();
|
||||
|
||||
dstlo = 0; dsthi = 0;
|
||||
prtlin(); setdst(&$5678);
|
||||
prttxt(); prbyte(dstlo);
|
||||
prtcma(); prbyte(dsthi);
|
||||
newlin();
|
||||
prttxt(); setreg(0,0,0);
|
||||
getdst(); prtwrd();
|
||||
newlin(); newlin();
|
||||
|
||||
|
||||
goto exit;
|
||||
|
||||
void setreg(aa,yy,xx) {}
|
||||
|
||||
void prtwrd(aa,yy,xx) {
|
||||
prbyte(yy);
|
||||
prbyte(xx);
|
||||
}
|
||||
|
||||
void prtcma() {prchr(',');}
|
||||
|
||||
void prtlin() {prttxt(); newlin();}
|
||||
|
||||
void prttxt() {
|
||||
while (txtstr[txtidx]) {
|
||||
//prbyte(txtidx);prchr(' ');
|
||||
prchr(txtstr[txtidx]);
|
||||
txtidx++;
|
||||
}
|
||||
txtidx++;
|
||||
}
|
220
test/testsl.c02
Normal file
220
test/testsl.c02
Normal file
@ -0,0 +1,220 @@
|
||||
/************************************************
|
||||
* TESTSL - Test Library stdlib.h02 for py65mon *
|
||||
************************************************/
|
||||
|
||||
//Specify System Header using -H option
|
||||
#include <stddef.h02>
|
||||
#include <stdlib.h02>
|
||||
|
||||
main:
|
||||
|
||||
tstabs: //Test abs()
|
||||
char onum, anum, cnum;
|
||||
|
||||
prchr('A');
|
||||
prchr('B');
|
||||
prchr('S');
|
||||
prchr(' ');
|
||||
|
||||
//test abs() positive numbers
|
||||
onum = 0;
|
||||
aploop:
|
||||
anum = abs(onum);
|
||||
if (onum <> anum) goto abserr;
|
||||
onum++;
|
||||
if (onum < $80) goto aploop;
|
||||
|
||||
//test abs() negative numbers
|
||||
anloop:
|
||||
anum = abs(onum);
|
||||
cnum = -onum;
|
||||
if (anum <> cnum) goto abserr;
|
||||
onum++;
|
||||
if (onum > $00) goto anloop;
|
||||
prchr('O');
|
||||
prchr('K');
|
||||
newlin();
|
||||
|
||||
tstmlt: //Test mult()
|
||||
char mltplr, mltpnd, acmlsb, acmmsb, acmlst;
|
||||
char prodct, ovrflw;
|
||||
|
||||
mltplr = 1;
|
||||
mrloop:
|
||||
prbyte(mltplr);
|
||||
mltpnd = 1; acmlst = 0;
|
||||
acmlsb = 0; acmmsb = 0;
|
||||
mdloop:
|
||||
acmlsb = acmlsb + mltplr;
|
||||
if (acmlsb<acmlst) acmmsb++;
|
||||
acmlst = acmlsb;
|
||||
prodct,ovrflw = mult(mltplr,mltpnd);
|
||||
if (prodct <> acmlsb) goto merror;
|
||||
//if (ovrflw <> acmmsb) goto merror;
|
||||
mltpnd++;
|
||||
if (mltpnd > 0) goto mdloop;
|
||||
mltplr++;
|
||||
if (mltplr > 0) goto mrloop;
|
||||
newlin();
|
||||
prchr('M');
|
||||
prchr('U');
|
||||
prchr('L');
|
||||
prchr('T');
|
||||
prchr(' ');
|
||||
prchr('O');
|
||||
prchr('K');
|
||||
newlin();
|
||||
|
||||
tstdiv: //Test div()
|
||||
char maxmpd, divdnd, divisr, quotnt;
|
||||
|
||||
mltplr = 255;
|
||||
maxmpd = 1;
|
||||
drloop:
|
||||
prbyte(mltplr);
|
||||
mltpnd = 1;
|
||||
acmlsb = 0;
|
||||
ddloop:
|
||||
prbyte(mltpnd);
|
||||
acmlsb = acmlsb + mltplr;
|
||||
prodct = mult(mltplr, mltpnd);
|
||||
quotnt = div(prodct, mltpnd);
|
||||
if (quotnt <> mltplr) goto derror;
|
||||
mltpnd++;
|
||||
if (mltpnd < maxmpd) goto ddloop;
|
||||
newlin();
|
||||
mltplr>>;
|
||||
maxmpd<<;
|
||||
if (mltplr <> 0) goto drloop;
|
||||
newlin();
|
||||
prchr('D');
|
||||
prchr('I');
|
||||
prchr('V');
|
||||
prchr(' ');
|
||||
prchr('O');
|
||||
prchr('K');
|
||||
newlin();
|
||||
|
||||
|
||||
tstrnd: //Test rand() and rands()
|
||||
char countr, rndnum, rndtbl[255];
|
||||
|
||||
rands(1); //Seed Random Number Generator;
|
||||
|
||||
countr = 0;
|
||||
|
||||
riloop:
|
||||
rndtbl[countr] = 0;
|
||||
countr++;
|
||||
if (countr <> 0) goto riloop;
|
||||
|
||||
rnloop:
|
||||
rndnum = rand();
|
||||
if (rndtbl[rndnum] > 0) goto rnderr;
|
||||
rndtbl[rndnum] = $FF;
|
||||
prbyte(rndnum);
|
||||
prchr(' ');
|
||||
countr++;
|
||||
if (countr < 255) goto rnloop;
|
||||
newlin();
|
||||
prchr('R');
|
||||
prchr('A');
|
||||
prchr('N');
|
||||
prchr('D');
|
||||
prchr(' ');
|
||||
prchr('O');
|
||||
prchr('K');
|
||||
newlin();
|
||||
|
||||
tstc2a: //Test ctoa();
|
||||
char srcchr, dstchr, tststr[4];
|
||||
|
||||
srcchr = 0;
|
||||
caloop:
|
||||
prbyte(srcchr);
|
||||
prchr(' ');
|
||||
ctoa(srcchr, &tststr);
|
||||
dstchr = atoc(&tststr);
|
||||
if (srcchr <> dstchr) goto c2aerr;
|
||||
srcchr++;
|
||||
if (srcchr <> 0) goto caloop;
|
||||
newlin();
|
||||
prchr('C');
|
||||
prchr('T');
|
||||
prchr('O');
|
||||
prchr('A');
|
||||
prchr(' ');
|
||||
prchr('O');
|
||||
prchr('K');
|
||||
newlin();
|
||||
|
||||
|
||||
goto exit;
|
||||
|
||||
abserr:
|
||||
prchr('A');
|
||||
prchr('B');
|
||||
prchr('S');
|
||||
prchr('(');
|
||||
prbyte(onum);
|
||||
prchr(')');
|
||||
prchr('=');
|
||||
prbyte(anum);
|
||||
prchr(',');
|
||||
prbyte(cnum);
|
||||
newlin();
|
||||
goto exit;
|
||||
|
||||
merror:
|
||||
newlin();
|
||||
prbyte(mltplr);
|
||||
prchr('*');
|
||||
prbyte(mltpnd);
|
||||
prchr('=');
|
||||
//prbyte(ovrflw);
|
||||
prbyte(prodct);
|
||||
prchr(',');
|
||||
//prbyte(acmmsb);
|
||||
prbyte(acmlsb);
|
||||
newlin();
|
||||
goto exit;
|
||||
|
||||
derror:
|
||||
newlin();
|
||||
prbyte(divdnd);
|
||||
prchr('/');
|
||||
prbyte(divisr);
|
||||
prchr('=');
|
||||
prbyte(quotnt);
|
||||
prchr(',');
|
||||
prbyte(mltplr);
|
||||
newlin();
|
||||
goto exit;
|
||||
|
||||
rnderr:
|
||||
prchr('R');
|
||||
prchr('A');
|
||||
prchr('N');
|
||||
prchr('D');
|
||||
prchr('(');
|
||||
prchr(')');
|
||||
prchr('=');
|
||||
prbyte(rndnum);
|
||||
prchr(',');
|
||||
prbyte(countr);
|
||||
newlin();
|
||||
goto exit;
|
||||
|
||||
c2aerr:
|
||||
prchr('C');
|
||||
prchr('T');
|
||||
prchr('O');
|
||||
prchr('A');
|
||||
prchr('(');
|
||||
prbyte(srcchr);
|
||||
prchr(')');
|
||||
prchr('=');
|
||||
prbyte(dstchr);
|
||||
newlin();
|
||||
goto exit;
|
||||
|
18
test/v8k.bat
Normal file
18
test/v8k.bat
Normal file
@ -0,0 +1,18 @@
|
||||
@ECHO OFF
|
||||
IF EXIST %1.c02 GOTO COMPILE
|
||||
ECHO File %1.c02 not found
|
||||
GOTO EOF
|
||||
|
||||
:COMPILE
|
||||
ECHO Compiling File %1.c02 for VIC 20 +8k
|
||||
..\c02.exe -H vic8k %1 >%1.dbg
|
||||
IF %ERRORLEVEL% NEQ 0 GOTO EOF
|
||||
ECHO Assembling File %1.asm
|
||||
C:\Programs\dasm %1.asm -f1 -o%1.prg -l%1.lst -s%1.sym
|
||||
|
||||
IF %ERRORLEVEL% NEQ 0 GOTO EOF
|
||||
|
||||
ECHO Starting Emulator
|
||||
@start C:\Programs\WinVICE\xvic.exe -config xvic.ini %1.prg
|
||||
|
||||
:EOF
|
22
test/xvic.ini
Normal file
22
test/xvic.ini
Normal file
@ -0,0 +1,22 @@
|
||||
[VIC20]
|
||||
Window0Xpos=523
|
||||
Window0Ypos=58
|
||||
Window0Width=618
|
||||
Window0Height=569
|
||||
FullscreenWidth=640
|
||||
FullscreenHeight=480
|
||||
ConfirmOnExit=0
|
||||
SoundDeviceName="dx"
|
||||
SoundBufferSize=100
|
||||
VirtualDevices=1
|
||||
MachineVideoStandard=2
|
||||
RAMBlock1=1
|
||||
VICVideoCache=1
|
||||
VICFilter=0
|
||||
SidEngine=1
|
||||
SidModel=0
|
||||
DriveTrueEmulation=0
|
||||
ETHERNET_DISABLED=1
|
||||
ETHERNETCARTBase=38912
|
||||
Acia1Base=38912
|
||||
|
53
util/bin2asc.py
Normal file
53
util/bin2asc.py
Normal file
@ -0,0 +1,53 @@
|
||||
#Binary to ASCII
|
||||
#Converts DASM -F1 file to Apple 1 Monitor format
|
||||
|
||||
#DASM -F1 File two byte load address in LSB, MSB order
|
||||
#followed by binary object coda
|
||||
|
||||
#Apple 1 Monitor Format
|
||||
#ADDR: BYTE BYTE BYTE...
|
||||
#0300: 00 01 02 03 04 05 06 07
|
||||
#0308: 08 09 0A 0B 0C 0D 0E 0F
|
||||
|
||||
import os
|
||||
import sys
|
||||
|
||||
def getArgs():
|
||||
argCount = len(sys.argv)
|
||||
if argCount != 2:
|
||||
print("Usage:", sys.argv[0], "objfile")
|
||||
exit(2)
|
||||
return sys.argv[1]
|
||||
|
||||
def splitFileSpec(filePath):
|
||||
fileDir, fileSpec = os.path.split(filePath)
|
||||
fileName, fileExt = os.path.splitext(fileSpec)
|
||||
if fileExt == '': fileExt = '.obj'
|
||||
return fileDir, fileName, fileExt
|
||||
|
||||
def readPrgFile(fileSpec):
|
||||
with open(fileSpec, "rb") as prgFile:
|
||||
prgAddr = prgFile.read(2)
|
||||
prgData = prgFile.read()
|
||||
address = prgAddr[0] + prgAddr[1] * 256
|
||||
return address, prgData
|
||||
|
||||
def writeAscFile(dir, name, addr, data):
|
||||
ascName = os.path.join(dir, name + ".asc")
|
||||
line = "";
|
||||
with open(ascName, "w") as ascFile:
|
||||
for i in range(len(data)):
|
||||
if i & 7 == 0:
|
||||
if len(line): ascFile.write(line + '\n')
|
||||
line = "{:04X}:".format(addr + i)
|
||||
line = line + " {:02X}".format(data[i])
|
||||
ascFile.write(line + '\n')
|
||||
return ascName
|
||||
|
||||
objFile = getArgs()
|
||||
fileDir, fileName, fileExt = splitFileSpec(objFile)
|
||||
inName = os.path.join(fileDir, fileName + fileExt)
|
||||
print("Reading file", inName)
|
||||
inAddr, inData = readPrgFile(inName)
|
||||
outName = writeAscFile(fileDir, fileName, inAddr, inData)
|
||||
print ("Wrote file", outName)
|
Loading…
Reference in New Issue
Block a user