bdos equ 5 ; CP/M Function Call Address
boot equ 0 ; Return To CP/M
sprint equ 9 ; String Print Function Number
conin equ 1 ; Keyboard Read Function Number
conout equ 2 ; Console Output Function Number
cr equ 0Dh ; ASCII Code For <CR>
space equ 20h ; ASCII Code For <Space>
back equ 08h ; Move Cursor Left
down equ 0Ah ; Move Cursor Down
lf equ 0Ah ; " " " "
equal equ 3Dh
plus equ 2Bh
subt equ 2Dh
esc equ 1Bh ; ASCII Code For <Escape>
star equ 2Ah ; ASCII Code For <Asterisk>
org 100h ; Starting Memory Loc
lxi sp, sp0 ; Ini Stack Point
start: call clear ; Clear Screen
mvi c,sprint ; Print End Message
lxi d,begin ; " " " "
call bdos ; " " " "
lxi h,0
call read
call again
done: call clear ; Clear Screen
mvi c,sprint ; Print End Message
lxi d,end ; " " " "
call bdos ; " " " "
jmp boot ; Release Control To OS
read: mvi c,sprint
lxi d,entry
call bdos
read2: mvi c,conin
call bdos
cpi equal
rz
cpi space
jz read2
cpi plus
jz pluspl
cpi subt
jz plussu
jnz add
add: sui '0' ; Convert Ascii To Decimal
mov d,a ; Place A In D
mvi a,0 ; Ini A To Zero
add b ; Add First To A
add a ; Num*2
add a ; Num*4
add a ; Num*8
add b ; Num*9
add b ; Num*10
add d ; Num*10 Plus New Digit
mov b,a ; Place A In B
jmp read2
addwp: mvi c,conin
call bdos
cpi equal
jz outpl
cpi space
jz addwp
cpi plus
jz pluspl
cpi subt
jz plussu
sui '0' ; Convert Ascii To Decimal
mov d,a ; Place A In D
mvi a,0 ; Ini A To Zero
add b ; Add First To A
add a ; Num*2
add a ; Num*4
add a ; Num*8
add b ; Num*9
add b ; Num*10
add d ; Num*10 Plus New Digit
mov b,a ; Place A In B
jmp addwp
subtr: mvi c,conin
call bdos
cpi equal
jz outsu
cpi space
jz subtr
cpi plus
jz subtpl
cpi subt
jz subtsu
sui '0' ; Convert Ascii To Decimal
mov d,a ; Place A In D
mvi a,0 ; Ini A To Zero
add b ; Add First To A
add a ; Num*2
add a ; Num*4
add a ; Num*8
add b ; Num*9
add b ; Num*10
add d ; Num*10 Plus New Digit
mov b,a ; Place A In B
jmp subtr
pluspl: mov a,h
add b
mov h,a
mvi b,0
jmp addwp
plussu: mov a,h
add b
mov h,a
mvi b,0
jmp subtr
subtpl: mov a,b
sub b
sub b
mov b,a
mov a,h
add b
mov h,a
mvi b,0
jmp addwp
subtsu: mov a,b
sub b
sub b
mov b,a
mov a,h
add b
mov h,a
mvi b,0
jmp subtr
outpl: mov a,h
add b
jm neg
mov h,a
mvi b,0
mvi e,0
jmp out
outsu: mov a,b
sub b
sub b
mov b,a
mov a,h
add b
jm neg
mov h,a
mvi b,0
mvi e,0
out: sui 100
inr e
jnc out
dcr e
adi 100
mov c,a ; Place A In C
mov a,e ; Place E In A
adi '0' ; Add Ascii Value Zero To A
mov e,a ; Place A In E
mov a,c ; Place C In A
mvi c,conout ; Print Value
call bdos ; " " " "
mvi e,0
out2: sui 10 ; Subtract 10 From A
inr e ; Add One To E
jnc out2 ; Jump On No Carry
dcr e ; Subtract One From E
adi 10 ; Add 10 To A
mov c,a ; Place A In C
mov a,e ; Place E In A
adi '0' ; Add Ascii Value Zero To A
mov e,a ; Place A In E
mov a,c ; Place C In A
mvi c,conout ; Print Value
call bdos ; " " " "
adi '0' ; Add Ascii Value Zero To A
mov e,a ; Place A In E
mvi c,conout ; Print Value
call bdos ; " " " "
ret ; Return
neg: mov b,a
mvi a,255
sub b
inr a
mvi e,'-'
mvi c,conout
call bdos
mov h,a
mvi b,0
mvi e,0
jmp out
again: mvi c,sprint ; Print End Message
lxi d,redo ; " " " "
call bdos ; " " " "
mvi c,conin ; Input Number From Keyboard
call bdos ; " " " "
cpi 'y' ; Compare To Ascii y
jz start ; Run Again If True
cpi 'Y' ; Compare To Ascii Y
jz start ; Run Again If True
jnz done ; End Program
;<><><><><><><><><><><><><><><><>
; clear - Clears The Screen
;<><><><><><><><><><><><><><><><>
clear: mvi c, sprint ; Print Clear Screen
lxi d, clrscr ; " " " "
call bdos ; " " " "
ret ; Return
;<><><><><><><><><><><><><><><><>
; End of Clear
;<><><><><><><><><><><><><><><><>
;<><><><><><><><><><><><><><><><>
; Data Space
;<><><><><><><><><><><><><><><><>
begin: db 'Welcome To Add-It 2003', lf, cr, cr ; Welcome Message
db lf,cr,'This Program Will Add or Subtract'
db ' Any Number Of Terms,',lf,cr,cr
db cr,cr,' As Long As The Subtotal Stays Below 255 and Above '
db '-255. $',lf,cr,cr
entry: db lf,lf,cr,cr, cr,'Enter Your Equation: $'
redo: db lf,cr,cr, 'Continue (Y/N)?: $ ' ; Ending Message
end: db 'Thanks For Using Add-It 2003!', lf, cr
db down,down,down,'Copyright 2003 ',lf,cr
db down,'Bradley Koehler $'
clrscr: db esc, star, '$'
ds 30
sp0 equ $
end