@@ -10,7 +10,7 @@ MASTER INDEX | |||||
550 TI-84+ Recipe 580 RC2014 Recipe | 550 TI-84+ Recipe 580 RC2014 Recipe | ||||
620 Sega Master System Recipe | 620 Sega Master System Recipe | ||||
650 AVR assembler 730 8086 assembler | 650 AVR assembler 730 8086 assembler | ||||
810 PC/AT Recipe | |||||
@@ -2,7 +2,7 @@ | |||||
Work in progress. Load with "750 LOAD". | Work in progress. Load with "750 LOAD". | ||||
Test code at B731 | |||||
@@ -1,12 +0,0 @@ | |||||
H@ ORG ! | |||||
JMP8, L1 FWR8 ( start ) | |||||
L2 BSET ( msg ) ," Hello, World!" 0 A, | |||||
L1 FSET ( start ) | |||||
CLI, AH 0 MOVri, AL 2 MOVri, 0x10 INT, | |||||
SI L2 @ ( msg ) MOVrI, AH 0x0e MOVri, | |||||
L1 BSET ( loop ) LODSB, AL AL ORrr, | |||||
JZ, L2 FWR8 ( next ) 0x10 INT, | |||||
JMP8, L1 ( loop ) BWR | |||||
L2 FSET ( next ) AH 0 MOVri, 0x16 INT, | |||||
AH 0x0e MOVri, 0x16 INT, HLT, | |||||
PC ORG @ DUMP |
@@ -1,4 +1,5 @@ | |||||
VARIABLE ORG | VARIABLE ORG | ||||
CREATE BIN( 0 , : BIN(+ BIN( @ + ; | |||||
VARIABLE L1 VARIABLE L2 VARIABLE L3 VARIABLE L4 | VARIABLE L1 VARIABLE L2 VARIABLE L3 VARIABLE L4 | ||||
: AL 0 ; : CL 1 ; : DL 2 ; : BL 3 ; | : AL 0 ; : CL 1 ; : DL 2 ; : BL 3 ; | ||||
: AH 4 ; : CH 5 ; : DH 6 ; : BH 7 ; | : AH 4 ; : CH 5 ; : DH 6 ; : BH 7 ; | ||||
@@ -2,7 +2,7 @@ | |||||
: SPLITB | : SPLITB | ||||
256 /MOD SWAP | 256 /MOD SWAP | ||||
; | ; | ||||
: PC H@ ORG @ - ; | |||||
: PC H@ ORG @ - BIN( @ + ; | |||||
: A, C, ; | : A, C, ; | ||||
( dst8 src8 -- modrm ) | ( dst8 src8 -- modrm ) | ||||
: MODRMrr 0x7 AND 3 LSHIFT SWAP 0x7 AND OR 0xc0 OR ; | : MODRMrr 0x7 AND 3 LSHIFT SWAP 0x7 AND OR 0xc0 OR ; |
@@ -12,5 +12,5 @@ | |||||
DUP PC ( l l pc ) | DUP PC ( l l pc ) | ||||
-^ 1- ( l off ) | -^ 1- ( l off ) | ||||
( warning: l is a PC offset, not a mem addr! ) | ( warning: l is a PC offset, not a mem addr! ) | ||||
SWAP ORG @ + ( BIN( @ - ) ( off addr ) | |||||
SWAP ORG @ + BIN( @ - ( off addr ) | |||||
C! ; | C! ; |
@@ -0,0 +1,5 @@ | |||||
PC/AT Recipe | |||||
Work in progress. | |||||
811 Hello World boot |
@@ -0,0 +1,14 @@ | |||||
: _filler 510 H@ ORG @ - DO 0 A, LOOP 0x55 A, 0xaa A, ; | |||||
H@ ORG ! 0x7c00 BIN( ! ( BIOS loads boot bin at 0x7c00 ) | |||||
JMP8, L1 FWR8 ( start ) | |||||
L2 BSET ( msg ) ," Hello, World!" 0 A, | |||||
L1 FSET ( start ) | |||||
CLI, | |||||
AH 0 MOVri, AL 2 MOVri, ( 80x25 BW video mode ) 0x10 INT, | |||||
SI L2 @ ( msg ) MOVrI, AH 0x0e MOVri, ( print char ) | |||||
L1 BSET ( loop ) LODSB, AL AL ORrr, ( end of str? ) | |||||
JZ, L2 FWR8 ( next ) 0x10 INT, ( print char ) | |||||
JMP8, L1 ( loop ) BWR | |||||
L2 FSET ( next ) AH 0 MOVri, 0x16 INT, ( read kbd ) | |||||
AH 0x0e MOVri, 0x10 INT, ( spit read char ) HLT, ( done ) | |||||
_filler |
@@ -0,0 +1,16 @@ | |||||
TARGET = boot.bin | |||||
BASEDIR = ../.. | |||||
EDIR = $(BASEDIR)/emul | |||||
STAGE = $(EDIR)/stage | |||||
.PHONY: all | |||||
all: $(TARGET) | |||||
$(TARGET): xcomp.fs $(STAGE) | |||||
cat xcomp.fs | $(STAGE) > $@ | |||||
$(STAGE): | |||||
$(MAKE) -C $(EDIR) stage | |||||
.PHONY: emul | |||||
emul: $(TARGET) | |||||
qemu-system-i386 -fda $(TARGET) |
@@ -0,0 +1,3 @@ | |||||
# PC/AT recipe | |||||
Work in progress. |
@@ -0,0 +1,4 @@ | |||||
750 LOAD | |||||
811 LOAD | |||||
ORG @ 256 /MOD 2 PC! 2 PC! | |||||
H@ 256 /MOD 2 PC! 2 PC! |