diff options
author | Simon Rettberg | 2024-09-06 14:42:37 +0200 |
---|---|---|
committer | Simon Rettberg | 2024-09-06 14:42:37 +0200 |
commit | badef32037f52f79abc1f1440b786cd71afdf270 (patch) | |
tree | 412b792d4cab4a7a110db82fcf74fe8a1ac55ec1 /hacks/asm6502.h | |
parent | Delete pre-6.00 files (diff) | |
download | xscreensaver-master.tar.gz xscreensaver-master.tar.xz xscreensaver-master.zip |
Diffstat (limited to 'hacks/asm6502.h')
-rw-r--r-- | hacks/asm6502.h | 181 |
1 files changed, 0 insertions, 181 deletions
diff --git a/hacks/asm6502.h b/hacks/asm6502.h deleted file mode 100644 index 79b13a2..0000000 --- a/hacks/asm6502.h +++ /dev/null @@ -1,181 +0,0 @@ -/* - * Copyright (c) 2007 Jeremy English <jhe@jeremyenglish.org> - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation. No representations are made about the suitability of this - * software for any purpose. It is provided "as is" without express or - * implied warranty. - * - * Created: 07-May-2007 - */ - -/* - This is a port of the javascript 6502 assembler, compiler and - debugger. The orignal code was copyright 2006 by Stian Soreng - - www.6502asm.com - - The stack space is in page $100 to $1ff. The video buffer starts at - $200 and is 1024 bytes. Programs get loaded at address - $600. Address $fe is random and byte $ff is used for user input. - - User input is disabled. -*/ - -#ifndef __ASM6502_H__ -#define __ASM6502_H__ - -typedef uint8_t Bit8; -typedef uint16_t Bit16; -typedef uint32_t Bit32; - -#undef BOOL -#undef TRUE -#undef FALSE -#define BOOL Bit8 -#define TRUE 1 -#define FALSE 0 - -enum { - MAX_LABEL_LEN = 80, - NUM_OPCODES = 56, /* Number of unique instructions not counting DCB */ - MEM_64K = 65536, /* We have 64k of memory to work with. */ - MAX_PARAM_VALUE = 25, /* The number of values allowed behind dcb */ - MAX_CMD_LEN = 4, /* Each assembly command is 3 characeters long */ -/* The stack works from the top down in page $100 to $1ff */ - STACK_TOP = 0x1ff, - STACK_BOTTOM = 0x100, - PROG_START = 0x600 /* The default entry point for the program */ -}; - -typedef enum{ - SINGLE, IMMEDIATE_VALUE, IMMEDIATE_GREAT, - IMMEDIATE_LESS, INDIRECT_X, INDIRECT_Y, - ZERO, ZERO_X, ZERO_Y, - ABS_VALUE, ABS_OR_BRANCH, ABS_X, ABS_Y, - ABS_LABEL_X, ABS_LABEL_Y, DCB_PARAM -} m6502_AddrMode; - -typedef struct machine_6502 machine_6502; - -typedef struct { - char name[MAX_CMD_LEN]; - Bit8 Imm; - Bit8 ZP; - Bit8 ZPX; - Bit8 ZPY; - Bit8 ABS; - Bit8 ABSX; - Bit8 ABSY; - Bit8 INDX; - Bit8 INDY; - Bit8 SNGL; - Bit8 BRA; - void (*func) (machine_6502*, m6502_AddrMode); -} m6502_Opcodes; - -/* Used to cache the index of each opcode */ -typedef struct { - Bit8 index; - m6502_AddrMode adm; -} m6502_OpcodeIndex; - -/* Plotter is a function that will be called everytime a pixel - needs to be updated. The first two parameter are the x and y - values. The third parameter is the color index: - - Color Index Table - 00 black #000000 - 01 white #ffffff - 02 Red #880000 - 03 seafoam #aaffee - 04 fuscia #cc44cc - 05 green #00cc55 - 06 blue #0000aa - 07 Yellow #eeee77 - 08 tangerine #dd8855 - 09 brown #664400 - 10 salmon #ff7777 - 11 charcoal #333333 - 12 smoke #777777 - 13 lime #aaff66 - 14 light blue #0088ff - 15 gray #bbbbbb - - The plotter state variable of the machine gets passed as the forth - parameter. You can use this parameter to store state information. - -*/ -typedef void (*m6502_Plotter) (Bit8, Bit8, Bit8, void*); - -struct machine_6502 { - BOOL codeCompiledOK; - Bit8 regA; - Bit8 regX; - Bit8 regY; - Bit8 regP; - Bit16 regPC; /* A pair of 8 bit registers */ - Bit16 regSP; - Bit16 defaultCodePC; - Bit8 memory[MEM_64K]; - BOOL runForever; - int labelPtr; - BOOL codeRunning; - int myInterval; - m6502_Opcodes opcodes[NUM_OPCODES]; - int screen[32][32]; - int codeLen; - m6502_OpcodeIndex opcache[0xff]; - m6502_Plotter plot; - void *plotterState; -}; - -/* build6502() - Creates an instance of the 6502 machine */ -machine_6502 *m6502_build(void); - -/* destroy6502() - compile the file and exectue it until the program - is finished */ -void m6502_destroy6502(machine_6502 *machine); - -/* eval_file() - Compiles and runs a file until the program is - finished */ -void m6502_eval_file(machine_6502 *machine, const char *filename, - m6502_Plotter plot, void *plotterState); - -/* start_eval_file() - Compile the file and execute the first - instruction */ -void m6502_start_eval_file(machine_6502 *machine, const char *filename, - m6502_Plotter plot, void *plotterState); - -/* XXX -void m6502_start_eval_binary(machine_6502 *machine, Bit8 *program, - unsigned int proglen, - Plotter plot, void *plotterState); -*/ - -void m6502_start_eval_string(machine_6502 *machine, const char *code, - m6502_Plotter plot, void *plotterState); - -/* next_eval() - Execute the next insno of machine instructions */ -void m6502_next_eval(machine_6502 *machine, int insno); - -/* hexDump() - Dumps memory to output */ -void m6502_hexDump(machine_6502 *machine, Bit16 start, - Bit16 numbytes, FILE *output); - -/* Disassemble() - Prints the assembly code for the program currently - loaded in memory.*/ -void m6502_disassemble(machine_6502 *machine, FILE *output); - -/* trace() - Prints to output the current value of registers, the - current nmemonic, memory address and value. */ -void m6502_trace(machine_6502 *machine, FILE *output); - -/* save_program() - Writes a binary file of the program loaded in - memory. */ -/* XXX -void save_program(machine_6502 *machine, const char *filename); -*/ -#endif /* __ASM6502_H__ */ |