diff --git a/hillbilly1/ADD16.asm b/hillbilly1/ADD16.asm new file mode 100644 index 0000000..096e4dd --- /dev/null +++ b/hillbilly1/ADD16.asm @@ -0,0 +1,54 @@ +\ RAM Variables + ORG 0800H \RAM at 0800h + DEF X_Lo *1 + DEF X_Hi *1 + DEF Y_Lo *1 + DEF Y_Hi *1 + DEF Z_Lo *1 + DEF Z_Hi *1 + DEF Carry_Lo *1 + DEF Carry_Hi *1 + ORG 0400h +\ +\ load some numbers +\ +\ Put numbers in X and Y at 0800H by hand from Control Panel. +\ +\ +\ 16bit ADD X + Y -> Z + Carry_Hi +\ + +\ + NOP +ADD16: + WAIT + STAZ Carry_Lo \Clear lo carry + LDAA X_Lo + LDAB Y_Lo + ADD \ADD lo bytes + STAC Z_Lo \store partial sum + BRNO ADD16J1: \test OVF bit to see if Carry required + LDIA 01h \must be OVF, set a Carry_Lo + STAA Carry_Lo +ADD16J1: + STAZ Carry_Hi \Clear hi carry + LDAA X_Hi + LDAB Y_Hi + ADD \ADD hi bytes + STAC Z_Hi \store hi partial sum + BRNO ADD16J2: + LDAA 01h \might be a hi carry + STAA Carry_Hi +ADD16J2: + MOVC,A + LDAB Carry_Lo \include any lo carry + ADD + STAC Z_Hi + BRNO ADD16J3: + LDAA 01h + STAA Carry_Hi \which may trigger a hi carry +ADD16J3: +\ + BRA ADD16: +\ +\ end of ADD16 \ No newline at end of file diff --git a/hillbilly1/ADD16.hex b/hillbilly1/ADD16.hex new file mode 100644 index 0000000..1b394dc --- /dev/null +++ b/hillbilly1/ADD16.hex @@ -0,0 +1,10 @@ +0800: +0400: 00 0C BC 08 06 A0 08 00 +0408: A1 08 02 22 94 08 04 5C +0410: 04 17 98 01 84 08 06 BC +0418: 08 07 A0 08 01 A1 08 03 +0420: 22 94 08 05 5C 04 2D A0 +0428: 00 01 84 08 07 D0 A1 08 +0430: 06 22 94 08 05 5C 04 3E +0438: A0 00 01 84 08 07 60 04 +0440: 01 diff --git a/hillbilly1/ADD16.lst b/hillbilly1/ADD16.lst new file mode 100644 index 0000000..58a4b22 --- /dev/null +++ b/hillbilly1/ADD16.lst @@ -0,0 +1,93 @@ +>>>>> Starting pass1... +Symbol-> X_Lo 0800H (2048) +Symbol-> X_Hi 0801H (2049) +Symbol-> Y_Lo 0802H (2050) +Symbol-> Y_Hi 0803H (2051) +Symbol-> Z_Lo 0804H (2052) +Symbol-> Z_Hi 0805H (2053) +Symbol-> Carry_Lo 0806H (2054) +Symbol-> Carry_Hi 0807H (2055) +Label-> ADD16: 0401H +Label-> ADD16J1: 0417H +Label-> ADD16J2: 042DH +Label-> ADD16J3: 043EH +<<<<< end of pass1 +\ RAM Variables +0800: ORG 0800H \RAM at 0800h + DEF X_Lo *1 + DEF X_Hi *1 + DEF Y_Lo *1 + DEF Y_Hi *1 + DEF Z_Lo *1 + DEF Z_Hi *1 + DEF Carry_Lo *1 + DEF Carry_Hi *1 +0400: ORG 0400h +\ +\ load some numbers +\ +\ Put numbers in X and Y at 0800H by hand from Control Panel. +\ +\ +\ 16bit ADD X + Y -> Z + Carry_Hi +\ + +\ +0400: 00 NOP + ADD16: +0401: 0C WAIT +0402: BC 08 06 STAZ Carry_Lo \Clear lo carry +0405: A0 08 00 LDAA X_Lo +0408: A1 08 02 LDAB Y_Lo +040B: 22 ADD \ADD lo bytes +040C: 94 08 04 STAC Z_Lo \store partial sum +040F: 5C 04 17 BRNO ADD16J1: \test OVF bit to see if Carry required +0412: 98 01 LDIA 01h \must be OVF, set a Carry_Lo +0414: 84 08 06 STAA Carry_Lo + ADD16J1: +0417: BC 08 07 STAZ Carry_Hi \Clear hi carry +041A: A0 08 01 LDAA X_Hi +041D: A1 08 03 LDAB Y_Hi +0420: 22 ADD \ADD hi bytes +0421: 94 08 05 STAC Z_Hi \store hi partial sum +0424: 5C 04 2D BRNO ADD16J2: +0427: A0 00 01 LDAA 01h \might be a hi carry +042A: 84 08 07 STAA Carry_Hi + ADD16J2: +042D: D0 MOVC,A +042E: A1 08 06 LDAB Carry_Lo \include any lo carry +0431: 22 ADD +0432: 94 08 05 STAC Z_Hi +0435: 5C 04 3E BRNO ADD16J3: +0438: A0 00 01 LDAA 01h +043B: 84 08 07 STAA Carry_Hi \which may trigger a hi carry + ADD16J3: +\ +043E: 60 04 01 BRA ADD16: +\ +\ end of ADD16 + + +Labels +====== +0401: ADD16: +0417: ADD16J1: +042D: ADD16J2: +043E: ADD16J3: + +Symbols +====== + X_Lo: 0800 + X_Hi: 0801 + Y_Lo: 0802 + Y_Hi: 0803 + Z_Lo: 0804 + Z_Hi: 0805 + Carry_Lo: 0806 + Carry_Hi: 0807 + + +Constants +========= + +0:Errors diff --git a/hillbilly1/Hillbilly1.txt b/hillbilly1/Hillbilly1.txt new file mode 100644 index 0000000..ff48530 --- /dev/null +++ b/hillbilly1/Hillbilly1.txt @@ -0,0 +1,175 @@ + + +C:\>asm43 --help +Relay Computer Assembler: Ver. Beta 0.4.3 + +Valid assembler codes: + +ADD : 22 00100010 +AND : 26 00100110 +BRA : 60 01100000 +BRN : 48 01001000 +BRNN : 54 01010100 +BRNO : 5c 01011100 +BRNP : 50 01010000 +BRNZ : 4c 01001100 +BRO : 58 01011000 +BRP : 44 01000100 +BRZ : 40 01000000 +DEF : +EQU : +HALT : 08 00001000 +INCB,A : 2c 00101100 +INCB,C : 2e 00101110 +LDAA : a0 10100000 +LDAB : a1 10100001 +LDAC : a2 10100010 +LDDA : a8 10101000 +LDDB : a9 10101001 +LDDC : aa 10101010 +LDIA : 98 10011000 +LDIB : 99 10011001 +LDIC : 9a 10011010 +MOVA,B : c1 11000001 +MOVA,C : c2 11000010 +MOVA,MH : c3 11000011 +MOVA,ML : c4 11000100 +MOVAD+,PC: ec 11101100 +MOVB,A : c8 11001000 +MOVB,C : ca 11001010 +MOVB,MH : cb 11001011 +MOVB,ML : cc 11001100 +MOVC,A : d0 11010000 +MOVC,B : d1 11010001 +MOVC,MH : d3 11010011 +MOVC,ML : d4 11010100 +MOVM,PC : de 11011110 +MOVPC,AD+: f5 11110101 +MOVZ,A : f8 11111000 +MOVZ,B : f9 11111001 +MOVZ,C : fa 11111010 +MOVZ,MH : fb 11111011 +MOVZ,ML : fc 11111100 +NOP : 00 00000000 +NOTA,B : 29 00101001 +NOTA,C : 2a 00101010 +ORG : +RESET : 04 00000100 +ROLB,A : 34 00110100 +ROLB,C : 36 00110110 +RORA,B : 31 00110001 +RORA,C : 32 00110010 +STAA : 84 10000100 +STAB : 8c 10001100 +STAC : 94 10010100 +STAZ : bc 10111100 +STDA : 85 10000101 +STDB : 8d 10001101 +STDC : 95 10010101 +WAIT : 0c 00001100 +\ : + + + Example assembly + + +>>>>> Starting pass1... +Constant-> START 05H (5) +Constant-> LENG 0AH (10) +Constant-> END 0FH (15) +Symbol-> STACK 4000H (16384) +Symbol-> stkPtr 400AH (16394) +Label-> L1: 0040H +Label-> RET1: 0062H +<<<<< end of pass1 + +\ This is a comment +\ Define a constant + EQU START 05H + EQU LENG 10 + EQU END START+LENG + +\ Define some variables in RAM +4000: ORG 4000H \Ram at 4000H + DEF STACK *10 \Holds 5 addresses + DEF stkPtr *2 \Pointer into stack + +\ Beginning of code +\ + \ Space prefixed string + \ Tab prefixed string + \ Space after \ in string +0100: org 0100H +0100: 00 nop +0101: 00 NOP +0102: BC 40 0A STAZ stkPtr +0105: BC 40 0B STAZ stkPtr+1 +0108: F8 MOVZ,A +0109: 85 STDA +010A: A8 LDDA +0032: org 50 \using decimal org +0032: 99 FF LDIB FFH +0034: 99 08 LDIB START+3 +0036: 98 05 LDIA START +0038: 98 40 LDIA STACK:H +003A: 98 00 LDIA STACK:L +003C: 98 03 LDIA STACK+3:L +003E: 98 40 LDIA STACK+3:H + L1: +0040: 22 ADD +0041: D0 MOVC,A +0042: 4C 00 40 BRNZ L1: \ Test trailing comment +0045: 00 nop +0046: 00 nop +0047: A0 00 02 LDAA 0002H \ Address in Hex +004A: A0 00 40 LDAA L1: \ Address as a label +004D: A1 40 0A LDAB stkPtr \ Address as a symbol +0050: 2E INCB,C +0051: 94 40 0A STAC stkPtr +0054: 94 40 0D STAC stkPtr+START-2 +0057: A0 40 0B LDAA stkPtr+1 +005A: 36 ROLB,C +005B: 98 00 LDIA RET1:H +005D: C3 MOVA,MH +005E: 98 62 LDIA RET1:L +0060: C4 MOVA,ML +0061: DE MOVM,PC + RET1: +0062: 08 halt +\ End of program + + + +Labels +====== +0040: L1: +0062: RET1: + +Symbols +======= + STACK: 4000 + stkPtr: 400A + +Constants +========= + START: 05 + LENG: 0A + END: 0F + +Hex output +========== +4000: +0100: 00 00 BC 40 0A BC 40 0B +0108: F8 85 A8 +0032: 99 FF 99 08 98 05 98 40 +003A: 98 00 98 03 98 40 22 D0 +0042: 4C 00 40 00 00 A0 00 02 +004A: A0 00 40 A1 40 0A 2E 94 +0052: 40 0A 94 40 0D A0 40 0B +005A: 36 98 00 C3 98 62 C4 DE +0062: 08 + +0:Errors + + +C:\> \ No newline at end of file