From 89bc7df120f65177c9282855de61ba90b7bad269 Mon Sep 17 00:00:00 2001 From: Virgil Dupras Date: Thu, 18 Jun 2020 23:10:14 -0400 Subject: [PATCH] pcat: more native words --- blk/754 | 10 +++++----- blk/822 | 19 ++++++++++++++----- blk/823 | 13 +++++++++++++ blk/824 | 7 ++++++- 4 files changed, 38 insertions(+), 11 deletions(-) create mode 100644 blk/823 diff --git a/blk/754 b/blk/754 index 275f665..7e704e3 100644 --- a/blk/754 +++ b/blk/754 @@ -1,14 +1,14 @@ : OPr0 ( reg op ) CREATE C, C, DOES> C@+ A, C@ <<3 OR 0xc0 OR A, ; -0 0xd0 OPr0 ROLr1, 0 0xd1 OPr0 ROLx1, -1 0xd0 OPr0 RORr1, 1 0xd1 OPr0 RORx1, -4 0xd0 OPr0 SHLr1, 4 0xd1 OPr0 SHLx1, -5 0xd0 OPr0 SHRr1, 5 0xd1 OPr0 SHRx1, +0 0xd0 OPr0 ROLr1, 0 0xd1 OPr0 ROLx1, 4 0xf6 OPr0 MULr, +1 0xd0 OPr0 RORr1, 1 0xd1 OPr0 RORx1, 4 0xf7 OPr0 MULx, +4 0xd0 OPr0 SHLr1, 4 0xd1 OPr0 SHLx1, 6 0xf6 OPr0 DIVr, +5 0xd0 OPr0 SHRr1, 5 0xd1 OPr0 SHRx1, 6 0xf7 OPr0 DIVx, : OPrr CREATE C, DOES> C@ A, <<3 OR 0xc0 OR A, ; 0x31 OPrr XORxx, 0x30 OPrr XORrr, 0x88 OPrr MOVrr, 0x89 OPrr MOVxx, 0x28 OPrr SUBrr, 0x29 OPrr SUBxx, 0x08 OPrr ORrr, 0x09 OPrr ORxx, 0x3a OPrr CMPrr, 0x3b OPrr CMPxx, 0x00 OPrr ADDrr, -0x01 OPrr ADDxx, +0x01 OPrr ADDxx, 0x20 OPrr ANDrr, 0x21 OPrr ANDxx, diff --git a/blk/822 b/blk/822 index 039c38b..bbc2688 100644 --- a/blk/822 +++ b/blk/822 @@ -1,5 +1,14 @@ -CODE 0 AX AX XORxx, AX PUSHx, ;CODE -CODE 1 AX 1 MOVxI, AX PUSHx, ;CODE -CODE I [BP] 0 PUSH[w]+, ;CODE -CODE 1+ DI SP MOVxx, [DI] INC[w], ;CODE -CODE 1- DI SP MOVxx, [DI] DEC[w], ;CODE +CODE 2DROP SP 4 ADDxi, ;CODE +CODE 2DUP + AX POPx, BX POPx, + BX PUSHx, AX PUSHx, BX PUSHx, AX PUSHx, +;CODE +CODE S0 AX PS_ADDR MOVxI, AX PUSHx, ;CODE +CODE 'S SP PUSHx, ;CODE +CODE AND AX POPx, BX POPx, AX BX ANDxx, AX PUSHx, ;CODE +CODE OR AX POPx, BX POPx, AX BX ORxx, AX PUSHx, ;CODE +CODE XOR AX POPx, BX POPx, AX BX XORxx, AX PUSHx, ;CODE +CODE NOT + AX POPx, AX AX ORxx, + IFNZ, AX -1 MOVxI, THEN, AX INCx, AX PUSHx, +;CODE diff --git a/blk/823 b/blk/823 new file mode 100644 index 0000000..4165ca9 --- /dev/null +++ b/blk/823 @@ -0,0 +1,13 @@ +CODE + AX POPx, BX POPx, AX BX ADDxx, AX PUSHx, ;CODE +CODE - BX POPx, AX POPx, AX BX SUBxx, AX PUSHx, ;CODE +CODE * + AX POPx, BX POPx, + DX PUSHx, ( protect from MUL ) BX MULx, DX POPx, + AX PUSHx, +;CODE +CODE /MOD + BX POPx, AX POPx, + BL DIVr, ( TODO: use DIVx, risk of 8086 error ) + BH BH XORrr, BL AH MOVrr, BX PUSHx, ( modulo ) + BL AL MOVrr, BX PUSHx, ( division ) +;CODE diff --git a/blk/824 b/blk/824 index 8b7d3ce..56ebf50 100644 --- a/blk/824 +++ b/blk/824 @@ -1,6 +1,11 @@ +CODE 0 AX AX XORxx, AX PUSHx, ;CODE +CODE 1 AX 1 MOVxI, AX PUSHx, ;CODE +CODE I [BP] 0 PUSH[w]+, ;CODE +CODE 1+ DI SP MOVxx, [DI] INC[w], ;CODE +CODE 1- DI SP MOVxx, [DI] DEC[w], ;CODE CODE BYE BEGIN, JMPs, AGAIN, ;CODE CODE EMIT AX POPx, AH 0x0e MOVri, ( print char ) 0x10 INT, ;CODE -: FOO 'A' 'B' 'C' 2 PICK 4 (roll) EMIT EMIT EMIT EMIT ; +: FOO 42 10 /MOD '0' + EMIT '0' + EMIT ; : BOOT ['] FOO EXECUTE BYE ;