📄 base.asm
字号:
call .Buf_trans_X
lda0 SignX
xora #01
sta0 SignX
call .X_trans_Z
2$:
ret
;InputOperandX (decimal)
;Output:OperandZ (decimal)
LogicNot::
call Base_Dec2Hex
lda0 ErrorFlag
cmpe #1
brc 1$
lda #0
sta0 OpCntNo
lda #OperandZ+6
sta DP
0$:
lda I
xora #0xff
sta I
decdp
lda0 OpCntNo
inca
sta0 OpCntNo
cmpe #4
brnz 0$
1$:
call .Z_trans_X
call Base_Hex2Dec
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Private functions
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Input:OperandX
;Output:OperandZ
Dec2Bin:
lda #02h
sta0 Param+0
lda #11
sta0 Param+1
call Dec2HBOBase
ret
Dec2Hex:
lda #16h
sta0 Param+0
lda #9
sta0 Param+1
call Dec2HBOBase
ret
Dec2Oct:
lda #08h
sta0 Param+0
lda #11
sta0 Param+1
call Dec2HBOBase
ret
FillInLowByte:
lda #Buffer
adda BufLen
sta DP
lda #>.M_bcdbuf
sta PP
lda0 OperandX+6
sta .M_bcdbuf
call .bcdtohex
lda .M_bcdbuf
sta0 Temp1
lda #0
sta PP
lda Temp1
sta I
ret
FillInHighByte:
lda #Buffer
adda BufLen
sta DP
lda #>.M_bcdbuf
sta PP
lda0 OperandX+6
sta .M_bcdbuf
call .bcdtohex
lda .M_bcdbuf
rolc
rolc
rolc
rolc
anda #0xf0
sta0 Temp1
lda #0
sta PP
lda0 Temp1
ora I
sta I
ret
;Input:OperandX
;Output:OperandX
;Input:BufferZ:Base digits
;Input:(BufferZ+1,BufferZ+2)=(base table address High byte,base table address low byte)
HBO2DecBase:
lda #OperandX
sta0 Addr1
lda #Buffer
sta0 Addr2
call CopyData ; clear buffer to zero
lda0 PointX
sta0 PointB
lda0 SignX
sta0 SignB
call .ClrY
call .Y_trans_Buf
lda #6
sta0 BufLen
lda #0
sta OpCntNo
0$:
lda #Buffer
adda BufLen
sta DP
lda0 OpCntNo
rorc
brc 1$
lda I
anda #0x0f
sta0 Temp1
br 2$
1$:
lda I
anda #0xf0
rorc
rorc
rorc
rorc
anda #0x0f
sta0 Temp1
lda0 BufLen
deca
sta0 BufLen
2$:
lda0 OpCntNo
sta0 .M_Data_Offset
inca
sta0 OpCntNo
lda #>.M_hexbuf
sta PP
lda #0
sta .M_hexbuf
lda0 Temp1
sta .M_hexbuf+1
call .Hex2Bcd
lda .M_bcdbuf+1
sta0 Temp1 ;BCD value
lda #0
sta PP
lda BufferZ+1
sta Addr1
lda BufferZ+2
sta Addr2
call InpDataToOpY
call .ClrX
lda0 Temp1
sta0 OperandX+6
call Multiplation
call .Buf_trans_X
call .Z_trans_Y
call Addition
call .Z_trans_Buf
lda0 OpCntNo
cmpe BufferZ
brnz 0$
call .Buf_trans_Z
lda0 SignB
xora SignZ
sta0 SignZ
ret
;Input:OperandX,Param+0(base=2,8,16),Param+1(Digits of output)
;Output:OperandZ
Dec2HBOBase:
call .ClrY
lda #OperandY
sta0 Addr1
lda #Buffer
sta0 Addr2
call CopyData ; clear buffer to zero
lda #0
sta0 PointB
lda0 SignX
sta0 SignB
lda0 Param+0
sta0 OperandY+6
lda #6
sta0 BufLen
lda #0
sta OpCntNo
ModLoop:
call Mod
call MoveData
lda0 OpCntNo
rorc
brc 1$
call FillInLowByte
br 2$
1$:
call FillInHighByte
lda BufLen
deca
sta BufLen
;;
2$:
lda0 OpCntNo
inca
sta0 OpCntNo
call .ClrY
lda0 Param+0 ;base=2,8,16
sta0 OperandY+6
call .Z_trans_X
call LineUp
lda #OperandX
sta Addr1
lda #OperandY
sta Addr2
lda #07h
sta DpCount
call CompareData
lda Temp1
cmpe #2
brz 0$
call .ClrY
lda0 Param+0 ;base=2,8,16
sta0 OperandY+6
call .Z_trans_X
br ModLoop
0$:
call .Z_trans_X
call MoveData
lda0 OpCntNo
rorc
brc 3$
call FillInLowByte
br 4$
3$:
call FillInHighByte
4$:
lda0 OpCntNo
inca
sta0 OpCntNo
; lda0 OpCntNo
cmpe Param+1 ;base=2,8(10+1),16(8+1)
brnc 5$
lda #1
sta0 ErrorFlag
br EndDec2HBO
5$:
lda #Buffer
sta0 Addr1
lda #OperandZ
sta0 Addr2
call CopyData
lda0 SignB
sta0 SignZ
lda0 OpCntNo
sta0 PointZ
EndDec2HBO:
ret
MoveData::
lda #OperandX
sta Addr1
call CheckData
lda DpCount
adda #0
brz 0$
2$:
lda0 PointX
cmpe #0
brz 0$
cmpe #88h
brc 1$
deca
sta0 PointX
lda #OperandX
sta0 Addr1
call ShiftToR
br 2$
1$:
lda0 PointX
cmpe #0
brz 0$
lda OperandX
anda #0f0h
brnz 0$
lda0 PointX
inca
sta0 PointX
lda #OperandX
sta0 Addr1
call ShiftToL
br 1$
0$:
ret
;Input:Table address (Addr1=High,Addr2=Low)
;Input:Data Offset
InpDataToOpY::
;lda OP1
;anda #~10h
;sta OP1
call .ClrY
lda #0h
sta TPP
lda Addr1
sta TableC+1
lda .M_Data_Offset
adda .M_Data_Offset
sta Addr3
adda Addr3
adda Addr3
adda Addr3
adda Addr3
adda Addr2
sta TableC
lda TableC+1
addc #0
sta TableC+1
lda #0h
sta TPP
lda TableC+1
sta TPH
lda TableC
sta TPL
ldv
sta SignY
ldv
sta PointY
lda #OperandY
sta DP
InpY0:
ldv
cmpe #0ffh
brz End_InpY0
sta i
incdp
br InpY0
End_InpY0:
;lda OP1
;ora #10h
;sta OP1
ret
;
;InputOperandX,OperandY
;Input:MathOp (and:1,or:2,xor:3,xnor:4)
;Output:OperandZ
LogicMathOp:
call .ClrZ
call .Y_trans_Buf
call Base_Dec2Hex
lda0 ErrorFlag
cmpe #1
brc 5$
call .Z_trans_S
call .Buf_trans_X
call Base_Dec2Hex
lda0 ErrorFlag
cmpe #1
brc 5$
call .Z_trans_Y
call .S_trans_X
lda #0
sta0 OpCntNo
lda #6
sta0 BufLen
0$:
lda0 BufLen
adda #OperandX
sta DP
lda I
sta0 Temp1
lda0 BufLen
adda #OperandY
sta DP
lda I
sta0 Temp2
lda0 MathOp
cmpe #1 ;and operation
brnz 1$
lda0 Temp2
anda Temp1
sta0 Temp3
br 4$
1$:
lda0 MathOp
cmpe #2 ;or operation
brnz 2$
lda0 Temp2
ora Temp1
sta0 Temp3
br 4$
2$:
lda0 MathOp
cmpe #3 ;xor operation
brnz 3$
lda0 Temp2
xora Temp1
sta0 Temp3
br 4$
3$:
lda0 MathOp
cmpe #4 ;xnor operation
brnz 5$
lda0 Temp2
xora Temp1
xora #0xff
sta0 Temp3
4$:
lda0 BufLen
adda #OperandZ
sta DP
lda0 Temp3
sta I
lda0 BufLen
deca
sta0 BufLen
lda0 OpCntNo
inca
sta0 OpCntNo
cmpe #4
brnz 0$
5$:
call .Z_trans_X
call Base_Hex2Dec
ret
;Base-2 (10 digits)
Bin2DecTab:
DB 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0ffh
DB 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0ffh
DB 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0ffh
DB 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0ffh
DB 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x16,0ffh
DB 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x32,0ffh
DB 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0ffh
DB 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x28,0ffh
DB 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x56,0ffh
DB 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x12,0ffh
;Base-8 (10 digits)
Oct2DecTab:
DB 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0ffh
DB 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0ffh
DB 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0ffh
DB 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x12,0ffh
DB 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x96,0ffh
DB 0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x27,0x68,0ffh
DB 0x00,0x00,0x00,0x00,0x00,0x00,0x26,0x21,0x44,0ffh
DB 0x00,0x00,0x00,0x00,0x00,0x02,0x09,0x71,0x52,0ffh
DB 0x00,0x00,0x00,0x00,0x00,0x16,0x77,0x72,0x16,0ffh
DB 0x00,0x00,0x00,0x00,0x01,0x34,0x21,0x77,0x28,0ffh
;Base-16 (8 digits)
Hex2DecTab:
DB 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0ffh
DB 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x16,0ffh
DB 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x56,0ffh
DB 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x96,0ffh
DB 0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x55,0x36,0ffh
DB 0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x85,0x76,0ffh
DB 0x00,0x00,0x00,0x00,0x00,0x16,0x77,0x72,0x16,0ffh
DB 0x00,0x00,0x00,0x00,0x02,0x68,0x43,0x54,0x56,0ffh
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -