Skip to content

Instantly share code, notes, and snippets.

@rsbohn
Created January 30, 2026 12:29
Show Gist options
  • Select an option

  • Save rsbohn/e4308ad2bbb977c855a2a63157d6467a to your computer and use it in GitHub Desktop.

Select an option

Save rsbohn/e4308ad2bbb977c855a2a63157d6467a to your computer and use it in GitHub Desktop.
tawny factor.asm
****
** factor.asm -- factor 32 bit numbers
****
AORG >0000
DATA WPA ; WP
DATA START ; PC
AORG >1000 ; workspaces
WPA BSS >20
WPB BSS >20
AORG >1800
START
LI 0, >1700 ; output pointer
MOV @>17FC, 3 ; N high
MOV @>17FE, 4 ; N low
CI 3, >0000
JNE FACTOR_INIT
CI 4, >0000
JNE FACTOR_INIT
LI 1, >0000
MOV 1, *0+
MOV 1, *0+
IDLE
FACTOR_INIT
LI 5, >0002 ; divisor
FACTOR_LOOP
CI 3, >0000
JNE CHECK_DIV
CI 4, >0001
JEQ DONE
CHECK_DIV
MOV 5, 9
MPY 5, 9
C 3, 9
JEQ CMP_LOW
JH REMAINING_32
JMP TRY_DIV
CMP_LOW
C 4, R10
JH REMAINING_32
JMP TRY_DIV
TRY_DIV
MOV 3, R11
MOV 4, R12
LI 6, >0000 ; remainder
LI 7, >0000 ; quotient high
LI 8, >0000 ; quotient low
LI 2, >0020 ; 32 bits
DIV32_LOOP
LI 9, >0000
SLA 4, 1
JOC DIV32_LOW_CARRY
JMP DIV32_LOW_DONE
DIV32_LOW_CARRY
LI 9, >0001
DIV32_LOW_DONE
LI R10, >0000
SLA 3, 1
JOC DIV32_HIGH_CARRY
JMP DIV32_HIGH_DONE
DIV32_HIGH_CARRY
LI R10, >0001
DIV32_HIGH_DONE
CI 9, >0000
JEQ DIV32_SKIP_HIGH_LSB
ORI 3, >0001
DIV32_SKIP_HIGH_LSB
SLA 6, 1
CI R10, >0000
JEQ DIV32_SKIP_REM_LSB
ORI 6, >0001
DIV32_SKIP_REM_LSB
LI 9, >0000
SLA 8, 1
JOC DIV32_QLOW_CARRY
JMP DIV32_QLOW_DONE
DIV32_QLOW_CARRY
LI 9, >0001
DIV32_QLOW_DONE
SLA 7, 1
CI 9, >0000
JEQ DIV32_QSKIP_HIGH_LSB
ORI 7, >0001
DIV32_QSKIP_HIGH_LSB
C 5, 6
JHE DIV32_REM_GE
JMP DIV32_REM_LT
DIV32_REM_GE
S 5, 6
ORI 8, >0001
DIV32_REM_LT
DEC 2
JNE DIV32_LOOP
CI 6, >0000
JEQ FOUND_FACTOR
MOV R11, 3
MOV R12, 4
CI 5, >0002
JEQ SET_DIV3
AI 5, >0002
JMP FACTOR_LOOP
SET_DIV3
LI 5, >0003
JMP FACTOR_LOOP
FOUND_FACTOR
MOV 7, 3
MOV 8, 4
LI 1, >0000
MOV 1, *0+
MOV 5, *0+
JMP FACTOR_LOOP
REMAINING_32
MOV 3, *0+
MOV 4, *0+
JMP DONE
DONE
LI 1, >0000
MOV 1, *0+
MOV 1, *0+
IDLE
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment