A MIX with debugger and emulator (1914 lines) is available
in the iForth distribution.
-marcel
---
(* ************************************************************ *
* *
* Find the date of EASTER *
* *
* Knuth, Fundamental Algorithms, Exercise 1.3.2.14 *
* *
* ************************************************************ *)
\ View the output written to ans with "ans TO dumploc start GO".
MIXAL
FWD eastx
FWD Y
FWD G
FWD N
FWD Xplus12
FWD Dplus3
ORIG 1000
| march ALF MARCH
| april ALF APRIL
| ans ALF
| day ALF DD \ Note the invisible 3 spaces here!
| month ALF MMMMM
ALF \ Note the invisible 3 spaces here!
| year ALF YYYYY
ORIG * 20 +
| C CON 0 \ C times byte size
| easter STJ eastx
STX Y
| G ENTA 0 \ _E1._
DIV =19=
INCX 1
STX G(0:2)
LDA Y \ _E2._
MUL =1 100 // 1+= \ see
INCA 1 \ below
STA C(1:4)
MUL =3 4 // 1+= \ _E3._
STA Xplus12(0:2)
\ MIXAL: LDA =8(1:1)=
LDA =8 /bits 4 ** LSHIFT=
MUL C \ rA=8C
INCA 680 \ 680=5+27*25
MUL =1 25
From mhx@21:1/5 to All on Mon Mar 3 16:56:52 2025
A MIX language interpreter, debugger, and emulator in 1914 lines is
available in the iForth distribution.
-marcel
(* ************************************************************ *
* *
* Find the date of EASTER *
* *
* Knuth, Fundamental Algorithms, Exercise 1.3.2.14 *
* *
* ************************************************************ *)
\ View the output written to ans with "ans TO dumploc start GO".
MIXAL
FWD eastx
FWD Y
FWD G
FWD N
FWD Xplus12
FWD Dplus3
ORIG 1000
| march ALF MARCH
| april ALF APRIL
| ans ALF
| day ALF DD \ Note the invisible 3 spaces here!
| month ALF MMMMM
ALF \ Note the invisible 3 spaces here!
| year ALF YYYYY
ORIG * 20 +
| C CON 0 \ C times byte size
| easter STJ eastx
STX Y
| G ENTA 0 \ _E1._
DIV =19=
INCX 1
STX G(0:2)
LDA Y \ _E2._
MUL =1 100 // 1+= \ see
INCA 1 \ below
STA C(1:4)
MUL =3 4 // 1+= \ _E3._
STA Xplus12(0:2)
\ MIXAL: LDA =8(1:1)=
LDA =8 /bits 4 ** LSHIFT=
MUL C \ rA=8C
INCA 680 \ 680=5+27*25
MUL =1 25 // 1+= \ rA=Z+32
| Xplus12 DECA 0
STA 1F(0:2) \ Z+20-X
LDA Y \ _E4._
MUL =1 4 // 1+=
ADD Y
SUB Xplus12(0:2)
INCA 5
STA Dplus3
ENTA 0 \ _E5._
MUL =11=
| 1H INCX 0
DIV =30=
JXNN * 2+ \ See exercise 15
INCX 30
CMPX =24=
JE 1F
CMPX =25=
JNE 2F
LDA G(0:2)
DECA 11
JANP 2F
| 1H INCX 1
| 2H DECX 20 \ _E6._ (24-N)
CMPX =3=
JLE * 2+
DECX 30
STX N(0:2)
LDAN N(0:2) \ _E7._
ADD Dplus3
SRAX 5
DIV =7=
SLAX 5
| N INCA 0 \ 31-N
JANN 1F
CHAR
LDA april
JMP 2F
| 1H DECA 31
CHAR
LDA march
| 2H JBUS *(18)
STA month
STX day(1:2)
LDA Y
CHAR
STX year
OUT ans(18) \ print
| eastx JMP * \ Return to main program
| start LDX =1950=
JMP easter
LDX Y
INCX 1
CMPX =2000=
JLE easter 1+ \ we already linked once :-)
HLT
END start \ wrap up assembly