Selaa lähdekoodia

emul/z80: flatten directory structure

I'm about to reuse sdc.c in sms.c and the old directory structure
was becoming awkward.
master
Virgil Dupras 3 vuotta sitten
vanhempi
commit
490eceab6d
36 muutettua tiedostoa jossa 101 lisäystä ja 163 poistoa
  1. +3
    -0
      emul/z80/.gitignore
  2. +14
    -2
      emul/z80/Makefile
  3. +63
    -6
      emul/z80/README.md
  4. +0
    -0
      emul/z80/acia.c
  5. +0
    -0
      emul/z80/acia.h
  6. +1
    -1
      emul/z80/ps2_kbd.c
  7. +1
    -1
      emul/z80/ps2_kbd.h
  8. +1
    -1
      emul/z80/rc2014.c
  9. +0
    -1
      emul/z80/rc2014/.gitignore
  10. +0
    -16
      emul/z80/rc2014/Makefile
  11. +0
    -18
      emul/z80/rc2014/README.md
  12. +0
    -0
      emul/z80/sdc.c
  13. +0
    -0
      emul/z80/sdc.h
  14. +0
    -0
      emul/z80/sio.c
  15. +0
    -0
      emul/z80/sio.h
  16. +5
    -5
      emul/z80/sms.c
  17. +0
    -1
      emul/z80/sms/.gitignore
  18. +0
    -19
      emul/z80/sms/Makefile
  19. +0
    -33
      emul/z80/sms/README.md
  20. +1
    -1
      emul/z80/sms_pad.c
  21. +1
    -1
      emul/z80/sms_pad.h
  22. +1
    -1
      emul/z80/sms_ports.c
  23. +1
    -1
      emul/z80/sms_ports.h
  24. +1
    -1
      emul/z80/sms_vdp.c
  25. +0
    -0
      emul/z80/sms_vdp.h
  26. +0
    -0
      emul/z80/t6a04.c
  27. +0
    -0
      emul/z80/t6a04.h
  28. +0
    -1
      emul/z80/ti/.gitignore
  29. +0
    -19
      emul/z80/ti/Makefile
  30. +0
    -26
      emul/z80/ti/README.md
  31. +2
    -2
      emul/z80/ti84.c
  32. +1
    -1
      emul/z80/ti84_kbd.c
  33. +0
    -0
      emul/z80/ti84_kbd.h
  34. +2
    -2
      recipes/rc2014/Makefile
  35. +1
    -1
      recipes/sms/Makefile
  36. +2
    -2
      recipes/ti84/Makefile

+ 3
- 0
emul/z80/.gitignore Näytä tiedosto

@@ -1,2 +1,5 @@
/forth
/forth.bin
/ti84
/sms
/rc2014

+ 14
- 2
emul/z80/Makefile Näytä tiedosto

@@ -1,5 +1,8 @@
TARGETS = forth
TARGETS = forth rc2014 sms ti84
OBJS = emul.o z80.o
RC2014_OBJS = $(OBJS) sio.o acia.o sdc.o
SMS_OBJS = $(OBJS) sms_vdp.o sms_ports.o sms_pad.o ps2_kbd.o
TI84_OBJS = $(OBJS) t6a04.o ti84_kbd.o
CDIR = ../../cvm
STAGE = $(CDIR)/stage
BLKFS = $(CDIR)/blkfs
@@ -10,6 +13,15 @@ all: $(TARGETS)
forth: forth.c $(OBJS) $(BLKFS)
$(CC) forth.c $(OBJS) -lncurses -o $@

rc2014: rc2014.c $(RC2014_OBJS)
$(CC) rc2014.c $(RC2014_OBJS) -o $@

sms: sms.c $(SMS_OBJS)
$(CC) sms.c $(SMS_OBJS) -o $@ `pkg-config --cflags --libs xcb`

ti84: ti84.c $(TI84_OBJS)
$(CC) ti84.c $(TI84_OBJS) -o $@ `pkg-config --cflags --libs xcb`

emul.o: emul.c forth.bin $(BLKFS)
$(CC) -DFBIN_PATH=\"`pwd`/forth.bin\" -DBLKFS_PATH=\"`pwd`/$(BLKFS)\" -c -o emul.o emul.c

@@ -23,4 +35,4 @@ $(STAGE):

.PHONY: clean
clean:
rm -f $(TARGETS) emul.o *.bin z80.o
rm -f $(TARGETS) *.o *.bin

+ 63
- 6
emul/z80/README.md Näytä tiedosto

@@ -1,4 +1,4 @@
# emul
# Z80 emulation

This folder contains a couple of tools running under the [libz80][libz80]
emulator.
@@ -8,23 +8,80 @@ emulator.
You need `ncurses` to build the `forth` executable. In debian-based distros,
it's `libncurses5-dev`.

For `sms` and `ti84` emulators, you need XCB and pkg-config.

## Build

Run `make` and it builds the `forth` interpreter.
Running `make` builds all targets described below

## Usage
## Vanilla Forth

The `./forth` executable here works like the one in `/cvm`, except that it runs
under an emulated z80 machine instead of running natively. Refer to
`/cvm/README.md` for details.

## Not real hardware

`./forth` doesn't try to emulate real hardware
because the goal here is to facilitate "high level" development.

These apps run on imaginary hardware and use many cheats to simplify I/Os.

For real hardware emulation (which helps developing drivers), see subfolders.
## RC2014 emulation

This emulates a RC2014 classic with 8K of ROM, 32K of RAM and an ACIA hooked to
stdin/stdout.

Run `./rc2014 /path/to/rom` (for example, `os.bin` from RC2014's recipe).
Serial I/O is hooked to stdin/stdout. `CTRL+D` to quit.

There are 2 options. `-s` replaces the ACIA with a Zilog SIO and
`-c/path/to/image` hooks up a SD card with specified contents.

You can press `CTRL+E` to dump the whole 64K of memory into `memdump`.

## Sega Master System emulator

This emulates a Sega Master system with a monochrome screen and a Genesis pad
hooked to port A.

Launch the emulator with `./sms /path/to/rom` (you can use the binary from the
`sms` recipe.

This will show a window with the screen's content on it. The mappings to the
pad are:

* W --> Up
* A --> Left
* S --> Down
* D --> Right
* H --> A
* J --> B
* K --> C
* L --> Start

If your ROM is configured with PS/2 keyboard input, run this emulator with the
`-k` flag to replace SMS pad emulation with keyboard emulation.

In both cases (pad or keyboard), only port A emulation is supported.

Press ESC to quit.

## TI-84

This emulates a TI-84+ with its screen and keyboard. This is suitable for
running the `ti84` recipe.

Launch the emulator with `./ti84 /path/to/rom` (you can use the binary from the
`ti84` recipe. Use the small one, not the one having been filled to 1MB).

This will show a window with the LCD screen's content on it. Most applications,
upon boot, halt after initialization and stay halted until the ON key is
pressed. The ON key is mapped to the tilde (~) key.

Press ESC to quit.

As for the rest of the mappings, they map at the key level. For example, the 'Y'
key maps to '1' (which yields 'y' when in alpha mode). Therefore, '1' and 'Y'
map to the same calculator key. Backspace maps to DEL.

Left Shift maps to 2nd. Left Ctrl maps to Alpha.
[libz80]: https://github.com/ggambetta/libz80

emul/z80/rc2014/acia.c → emul/z80/acia.c Näytä tiedosto


emul/z80/rc2014/acia.h → emul/z80/acia.h Näytä tiedosto


emul/z80/sms/kbd.c → emul/z80/ps2_kbd.c Näytä tiedosto

@@ -1,4 +1,4 @@
#include "kbd.h"
#include "ps2_kbd.h"

void kbd_init(Kbd *kbd, Tristate *TH)
{

emul/z80/sms/kbd.h → emul/z80/ps2_kbd.h Näytä tiedosto

@@ -1,6 +1,6 @@
#include <stdint.h>
#include <stdbool.h>
#include "port.h"
#include "emul.h"

#define KBD_BUFSZ 0x10


emul/z80/rc2014/classic.c → emul/z80/rc2014.c Näytä tiedosto

@@ -11,7 +11,7 @@
#include <stdio.h>
#include <unistd.h>
#include <termios.h>
#include "../emul.h"
#include "emul.h"
#include "acia.h"
#include "sio.h"
#include "sdc.h"

+ 0
- 1
emul/z80/rc2014/.gitignore Näytä tiedosto

@@ -1 +0,0 @@
/classic

+ 0
- 16
emul/z80/rc2014/Makefile Näytä tiedosto

@@ -1,16 +0,0 @@
EXTOBJS = ../emul.o ../z80.o
OBJS = sio.o acia.o sdc.o classic.o
TARGET = classic

.PHONY: all
all: $(TARGET)

../emul.o:
make -C ..

$(TARGET): $(OBJS) $(EXTOBJS)
$(CC) $(OBJS) $(EXTOBJS) -o $@

.PHONY: clean
clean:
rm -f $(TARGET) $(OBJS)

+ 0
- 18
emul/z80/rc2014/README.md Näytä tiedosto

@@ -1,18 +0,0 @@
# RC2014 emulation

This emulates a RC2014 classic with 8K of ROM, 32K of RAM and an ACIA hooked to
stdin/stdout.

Run `make` to build.

## Usage

Run `./classic /path/to/rom` (for example, `os.bin` from RC2014's recipe).
Serial I/O is hooked to stdin/stdout. `CTRL+D` to quit.

There are 2 options. `-s` replaces the ACIA with a Zilog SIO and
`-c/path/to/image` hooks up a SD card with specified contents.

## Memory dump

You can press `CTRL+E` to dump the whole 64K of memory into `memdump`.

emul/z80/rc2014/sdc.c → emul/z80/sdc.c Näytä tiedosto


emul/z80/rc2014/sdc.h → emul/z80/sdc.h Näytä tiedosto


emul/z80/rc2014/sio.c → emul/z80/sio.c Näytä tiedosto


emul/z80/rc2014/sio.h → emul/z80/sio.h Näytä tiedosto


emul/z80/sms/sms.c → emul/z80/sms.c Näytä tiedosto

@@ -7,11 +7,11 @@
#define XK_MISCELLANY
#include <X11/keysymdef.h>

#include "../emul.h"
#include "vdp.h"
#include "port.h"
#include "pad.h"
#include "kbd.h"
#include "emul.h"
#include "sms_vdp.h"
#include "sms_ports.h"
#include "sms_pad.h"
#include "ps2_kbd.h"

#define RAMSTART 0xc000
#define VDP_CMD_PORT 0xbf

+ 0
- 1
emul/z80/sms/.gitignore Näytä tiedosto

@@ -1 +0,0 @@
/sms

+ 0
- 19
emul/z80/sms/Makefile Näytä tiedosto

@@ -1,19 +0,0 @@
EXTOBJS = ../emul.o ../z80.o
OBJS = sms.o vdp.o port.o pad.o kbd.o
TARGET = sms
CFLAGS += `pkg-config --cflags xcb`
LDFLAGS += `pkg-config --libs xcb`

.PHONY: all
all: $(TARGET)

../emul.o:
make -C ..

$(TARGET): $(OBJS) $(EXTOBJS)
$(CC) $(OBJS) $(EXTOBJS) -o $@ $(LDFLAGS)

.PHONY: clean
clean:
rm -f $(TARGET) $(OBJS)

+ 0
- 33
emul/z80/sms/README.md Näytä tiedosto

@@ -1,33 +0,0 @@
# Sega Master System emulator

This emulates a Sega Master system with a monochrome screen and a Genesis pad
hooked to port A.

## Build

You need `xcb` and `pkg-config` to build this. If you have them, run `make`.
You'll get a `sms` executable.

## Usage

Launch the emulator with `./sms /path/to/rom` (you can use the binary from the
`sms` recipe.

This will show a window with the screen's content on it. The mappings to the
pad are:

* W --> Up
* A --> Left
* S --> Down
* D --> Right
* H --> A
* J --> B
* K --> C
* L --> Start

If your ROM is configured with PS/2 keyboard input, run this emulator with the
`-k` flag to replace SMS pad emulation with keyboard emulation.

In both cases (pad or keyboard), only port A emulation is supported.

Press ESC to quit.

emul/z80/sms/pad.c → emul/z80/sms_pad.c Näytä tiedosto

@@ -1,4 +1,4 @@
#include "pad.h"
#include "sms_pad.h"

void pad_init(Pad *pad, Tristate *TH)
{

emul/z80/sms/pad.h → emul/z80/sms_pad.h Näytä tiedosto

@@ -1,6 +1,6 @@
#include <stdint.h>
#include <stdbool.h>
#include "port.h"
#include "emul.h"

typedef enum {
PAD_BTN_UP = 0,

emul/z80/sms/port.c → emul/z80/sms_ports.c Näytä tiedosto

@@ -1,4 +1,4 @@
#include "port.h"
#include "sms_ports.h"

void ports_init(Ports *ports)
{

emul/z80/sms/port.h → emul/z80/sms_ports.h Näytä tiedosto

@@ -1,5 +1,5 @@
#pragma once
#include "../emul.h"
#include "emul.h"

// Each port is a bitmask of each pin's status. 1 means high.
// From Bit 0 to 6: up, down, left, right, TL, TR, TH

emul/z80/sms/vdp.c → emul/z80/sms_vdp.c Näytä tiedosto

@@ -1,5 +1,5 @@
#include <string.h>
#include "vdp.h"
#include "sms_vdp.h"

void vdp_init(VDP *vdp)
{

emul/z80/sms/vdp.h → emul/z80/sms_vdp.h Näytä tiedosto


emul/z80/ti/t6a04.c → emul/z80/t6a04.c Näytä tiedosto


emul/z80/ti/t6a04.h → emul/z80/t6a04.h Näytä tiedosto


+ 0
- 1
emul/z80/ti/.gitignore Näytä tiedosto

@@ -1 +0,0 @@
/ti84

+ 0
- 19
emul/z80/ti/Makefile Näytä tiedosto

@@ -1,19 +0,0 @@
EXTOBJS = ../emul.o ../z80.o
OBJS = ti84.o t6a04.o kbd.o
TARGET = ti84
CFLAGS += `pkg-config --cflags xcb`
LDFLAGS += `pkg-config --libs xcb`

.PHONY: all
all: $(TARGET)

../emul.o:
make -C ..

$(TARGET): $(OBJS) $(EXTOBJS)
$(CC) $(OBJS) $(EXTOBJS) -o $@ $(LDFLAGS)

.PHONY: clean
clean:
rm -f $(TARGET) $(OBJS)

+ 0
- 26
emul/z80/ti/README.md Näytä tiedosto

@@ -1,26 +0,0 @@
# TI-84+ emulator

This emulates a TI-84+ with its screen and keyboard. This is suitable for
running the `ti84` recipe.

## Build

You need `xcb` and `pkg-config` to build this. If you have them, run `make`.
You'll get a `ti84` executable.

## Usage

Launch the emulator with `./ti84 /path/to/rom` (you can use the binary from the
`ti84` recipe. Use the small one, not the one having been filled to 1MB).

This will show a window with the LCD screen's content on it. Most applications,
upon boot, halt after initialization and stay halted until the ON key is
pressed. The ON key is mapped to the tilde (~) key.

Press ESC to quit.

As for the rest of the mappings, they map at the key level. For example, the 'Y'
key maps to '1' (which yields 'y' when in alpha mode). Therefore, '1' and 'Y'
map to the same calculator key. Backspace maps to DEL.

Left Shift maps to 2nd. Left Ctrl maps to Alpha.

emul/z80/ti/ti84.c → emul/z80/ti84.c Näytä tiedosto

@@ -14,9 +14,9 @@
#define XK_MISCELLANY
#include <X11/keysymdef.h>

#include "../emul.h"
#include "emul.h"
#include "t6a04.h"
#include "kbd.h"
#include "ti84_kbd.h"

#define RAMSTART 0x8000
#define KBD_PORT 0x01

emul/z80/ti/kbd.c → emul/z80/ti84_kbd.c Näytä tiedosto

@@ -1,7 +1,7 @@
#include <string.h>
#include <ctype.h>

#include "kbd.h"
#include "ti84_kbd.h"

void kbd_init(KBD *kbd)
{

emul/z80/ti/kbd.h → emul/z80/ti84_kbd.h Näytä tiedosto


+ 2
- 2
recipes/rc2014/Makefile Näytä tiedosto

@@ -4,7 +4,7 @@ CDIR = $(BASE)/cvm
EDIR = $(BASE)/emul/z80
STAGE = $(CDIR)/stage
BLKPACK = $(BASE)/tools/blkpack
EMUL = $(EDIR)/rc2014/classic
EMUL = $(EDIR)/rc2014

.PHONY: all
all: $(TARGET)
@@ -21,7 +21,7 @@ $(STAGE):
$(MAKE) -C $(CDIR) stage

$(EMUL):
$(MAKE) -C ${@:%/classic=%}
$(MAKE) -C $(EDIR)

.PHONY: emul
emul: $(EMUL) $(TARGET)


+ 1
- 1
recipes/sms/Makefile Näytä tiedosto

@@ -3,7 +3,7 @@ BASE = ../..
STAGE = $(BASE)/cvm/stage
BLKPACK = $(BASE)/tools/blkpack
SMSROM = $(BASE)/tools/smsrom
EMUL = $(BASE)/emul/z80/sms/sms
EMUL = $(BASE)/emul/z80/sms

.PHONY: all
all: $(TARGET)


+ 2
- 2
recipes/ti84/Makefile Näytä tiedosto

@@ -3,7 +3,7 @@ BASE = ../..
CDIR = $(BASE)/cvm
STAGE = $(CDIR)/stage
BLKPACK = $(BASE)/tools/blkpack
EMUL = $(BASE)/emul/z80/ti/ti84
EMUL = $(BASE)/emul/z80/ti84
MKTIUPGRADE = mktiupgrade

.PHONY: all
@@ -26,7 +26,7 @@ $(EMUL):
.PHONY: emul
emul: $(EMUL) $(TARGET)
$(EMUL) $(TARGET)
os.rom: $(TARGET)
dd if=$(TARGET) bs=1M of=$@ conv=sync



Loading…
Peruuta
Tallenna