📄 scical.asm
字号:
; ***************************************************************************
; * Project : Electronic Dictionary *
; * Date : 2003.9 *
; * File Name : SCICAL.ASM *
; ***************************************************************************
chip W65C02S ; Define chip : ST2100 base on 65c02.
pw 128
case off
externs on
include ST2202.def ; Include ST2100 I/O define.
include Data.def ; Data RAM define.
include Bios.h
include Graphics.h
include KeyDef.def
include Cal.def
include Graph.def
INCLUDE ST2202.MAC
public add_little_dot
public if_arg_equ_1
public if_fac_equ_1
public cuttail
public five_to_inc_1
public XeyfF
public memory
public memflag
public clearnum
public funckey
public numstack
public statusflag
public SciLoad
public SciKeyPress
public SciHSec
public SciSec
public SciMin
public SciKeyUp
public SciKeyDown
public SciTimer
public SciFromHelp
public ShowPreAns
public FMULTT_S
public fin
public ShiftRFac
public FacAddA
public ShowShift
public TranBinDec
public DisPlayNum
public SciLoad
;=====================================================
Num0K equ 0 ;'0'
Num1K equ 1 ;'1'
Num2K equ 2 ;'2'
Num3K equ 3 ;'3'
Num4K equ 4 ;'4'
Num5K equ 5 ;'5'
Num6K equ 6 ;'6'
Num7K equ 7 ;'7'
Num8K equ 8 ;'8'
Num9K equ 9 ;'9'
DotK equ 10 ;'.'
Exp10K equ 11 ;Exp10
MinusK equ 12 ;'-'
ShiftK equ 13 ;Shift
PiK equ 14 ;Pi
AngleK equ 15 ;Angle
HypK equ 16 ;Hyp
CK equ 17 ;Clear
ACK equ 18 ;AllClear
MRK equ 19 ;MR
MCK equ 20 ;MC
MAddK equ 21 ;M+
MSubK equ 22 ;M-
EQUK equ 23 ;'='
ADDK equ 24 ;'+'
SUBK equ 25 ;'-'
DIVK equ 26 ;'/'
MULK equ 27 ;'*'
XEYK equ 28 ;X^Y
XE1YK equ 29 ;X^1/Y
PERK equ 30 ;'%'
LnK equ 31 ;Ln
LogK equ 32 ;Log
SQRFOTK equ 33 ;Square Foot
INVK equ 34 ;1/X
EXK equ 35 ;E^X
B10EXK equ 36 ;10^X
XE2 equ 37 ;X^2
XSTEP equ 38 ;X!
SinK equ 39 ;Sin
CosK equ 40 ;Cos
TanK equ 41 ;Tan
ASinK equ 42 ;ASin
ACosK equ 43 ;ACos
ATanK equ 44 ;ATan
SinHK equ 45 ;SinH
CosHK equ 46 ;CosH
TanHK equ 47 ;TanH
ASinHK equ 48 ;ASinH
ACosHK equ 49 ;ACosH
ATanHK equ 50 ;ATanH
public sciodd_even
exp_flag equ 280h
sciodd_even equ 281h
memory_bak equ cal_fixram+30
MemFlag_bak equ cal_fixram+40 ;1
;=====================================================
; >>> Data RAM define
;FunctionNo equ CData+1
;=====================================================
; Event vector table.
DS0 .SECTION ; Data ROM location 10000h(Bank#2)
include caclbmp.asm
;=====================================================
KeyNum:
db QuesKey ;'0' 0
db BKey ;'1' 1
db NKey ;'2' 2
db MKey ;'3' 3
db GKey ;'4' 4
db HKey ;'5' 5
db JKey ;'6' 6
db TKey ;'7' 7
db YKey ;'8' 8
db UKey ;'9' 9
db pointkey ;Dot -->':' 10
db FKey ;Minus 11
db ShiftKey ;Shift 12
db VKey ;C 13
db ACKey ;AC 14
db KKey ;MR 15
db IKey ;MC 16
db LKey ;M+ 17
db OKEY ;M- 18
db spaceKey ;'=' 19 EnterKey
db UPKey ;'+' 20
db DOWNKey ;'-' 21
db RIGHTKey ;'/' 22
db LEFTKey ;'*' 23
db RKey ;% 24
db SKey ;Ln 25
db AKey ;Log 26
db DKey ;Square root 27
db ZKey ;X^y 28
db XKey ;1/x, X! 29
db CKey ;exp 30
; db SpaceKey ;Square root 31
db QKey ;Sin Sin-1 32
db WKey ;Cos Cos-1 33
db EKey ;Tan Tan-1 34
;Sin-1 30
;Cos-1 31
;Tan-1 29
KeyParity1:
db 0 ;'0'
db 1 ;'1'
db 2 ;'2'
db 3 ;'3'
db 4 ;'4'
db 5 ;'5'
db 6 ;'6'
db 7 ;'7'
db 8 ;'8'
db 9 ;'9'
db 10 ;Dot
db 12 ;Minus
db 13 ;Shift
db 17 ;C
db 18 ;AC
db 19 ;MR
db 20 ;MC
db 21 ;M+
db 22 ;M-
db 23 ;'='
db 24 ;'+'
db 25 ;'-'
db 26 ;'/'
db 27 ;'*'
db 30 ;%
db 31 ;Ln
db 32 ;Log
db 33 ;square foot
db 28 ;X^Y
db 34 ;1/X
db 11 ;Exp10
; db 15 ;angle select
db 39 ;Sin Sin-1
db 40 ;Cos Cos-1
db 41 ;Tan Tan-1
KeyParity2:
db 0 ;'0'
db 1 ;'1'
db 2 ;'2'
db 3 ;'3'
db 4 ;'4'
db 5 ;'5'
db 6 ;'6'
db 7 ;'7'
db 8 ;'8'
db 9 ;'9'
db 10 ;Dot
db 15 ;Minus
db 13 ;Shift
db 17 ;C
db 18 ;AC
db 19 ;MR
db 20 ;MC
db 21 ;M+
db 22 ;M-
db 23 ;'='
db 24 ;'+'
db 25 ;'-'
db 26 ;'/'
db 27 ;'*'
db 16 ;Hyp
db 35 ;eX
db 36 ;10^X
db 37 ;X^2
db 29 ;X^1/Y
db 38 ;X!
db 14 ;Pi
; db 15 ;Angle select
db 42 ;Sin-1
db 43 ;Cos-1
db 44 ;Tan-1
FONTDOT:
db 7,12
db 00000000b
db 00000000b
db 00000000b
db 00000000b
db 00000000b
db 00000000b
db 00000000b
db 00000000b
db 00000000b
db 11000001b
db 10000000b
FontMinus:
db 7,9
db 00000000b
db 00000000b
db 00000000b
db 00000111b
db 11000000b
db 00000000b
db 00000000b
db 00000000b
FontMinuss:
db 5,7
db 00000000b
db 00000001b
db 11110000b
db 00000000b
db 00000000b
FontMul:
db 7,9
db 00000001b
db 00000111b
db 00011011b
db 01100011b
db 10000111b
db 00011011b
db 01100011b
db 10000010b
FontM:
db 7,9
db 11000111b
db 10001111b
db 10111111b
db 11111101b
db 01111010b
db 11110001b
db 11100011b
db 11000110b
FontK: db 7,9
db 11000111b
db 10011011b
db 01100111b
db 10001110b
db 00011110b
db 00110110b
db 01100110b
db 11000110b
FontDeg:
db 21,11
db 11111111b ;#####################
db 11111111b ;#...................#
db 11111100b ;#.####..#####..###..#
db 00000000b ;#..#..#.#.....#...#.#
db 00000000b ;#..#..#.#.....#.....#
db 01101111b ;#..#..#.####..#..##.#
db 00111110b ;#..#..#.#.....#...#.#
db 01110011b ;#..#..#.#.....#...#.#
db 00100101b ;#.####..#####..###..#
db 00000100b ;#...................#
db 01011001b ;#####################
db 00101000b
db 00100000b
db 11001001b
db 01111001b
db 00110110b
db 01001010b
db 00001000b
db 10110010b
db 01010000b
db 01000101b
db 10111100b
db 11111001b
db 11001100b
db 00000000b
db 00000000b
db 01111111b
db 11111111b
db 11111110b
FontRad:
db 21,11
db 11111111b ;#####################
db 11111111b ;#...................#
db 11111100b ;#.####...###..####..#
db 00000000b ;#.#...#.#...#..#..#.#
db 00000000b ;#.#...#.#...#..#..#.#
db 01101111b ;#.####..#####..#..#.#
db 00011100b ;#.#.#...#...#..#..#.#
db 11110011b ;#.#..#..#...#..#..#.#
db 01000101b ;#.#...#.#...#.####..#
db 00010010b ;#...................#
db 01011010b ;#####################
db 00101000b
db 10010010b
db 11011110b
db 01111100b
db 10010110b
db 10100010b
db 00100100b
db 10110100b
db 10010001b
db 00100101b
db 10100010b
db 10001011b
db 11001100b
db 00000000b
db 00000000b
db 01111111b
db 11111111b
db 11111110b
FontAdd:
db 8,8
db 00011000b
db 00011000b
db 00011000b
db 11111111b
db 11111111b
db 00011000b
db 00011000b
db 00011000b
FontSub:
db 8,8
db 00000000b
db 00000000b
db 00000000b
db 11111111b
db 11111111b
db 00000000b
db 00000000b
db 00000000b
FontMulK;
db 8,8
db 00000000b
db 01100011b
db 00110110b
db 00011100b
db 00011100b
db 00110110b
db 01100011b
db 00000000b
FontDiv:
db 8,8
db 00011000b
db 00011000b
db 00000000b
db 11111111b
db 11111111b
db 00000000b
db 00011000b
db 00011000b
FontXey1:
db 9,8
db 10101111b
db 10100100b
db 00100010b
db 00000001b
db 00000000b
db 10000001b
db 01000000b
db 01100000b
db 00010000b
FontXeY:
db 9,7
db 00000010b
db 11000100b
db 10010100b
db 10000100b
db 00000010b
db 00000010b
db 10000010b
db 00100000b
FONTHYP:
db 20,9
db 11001101b
db 10011011b
db 11101100b
db 11011001b
db 10110011b
db 11001101b
db 10011011b
db 00111100b
db 11001111b
db 00110011b
db 11111100b
db 01100011b
db 11101100b
db 11000110b
db 00110000b
db 11001100b
db 01100011b
db 00001100b
db 11000110b
db 00110000b
db 11001100b
db 01100011b
db 00000000b
Function:
dw Exp10F-1 ;11 10Exp
dw MinusF-1 ;12 '-'
dw ShiftF-1 ;13 Shift
dw PiF-1 ;14 Pi
dw AngleF-1 ;15 Angle
dw HypF-1 ;16 Hyp
dw ClearF-1 ;17 Clear
dw AClearF-1 ;18 AllClear
dw MRF-1 ;19 MR
dw MCF-1 ;20 MC
dw MAddF-1 ;21 M+
dw MSubF-1 ;22 M-
dw EqualF-1 ;23 '='
dw ADDF-1 ;24 '+'
dw SUBF-1 ;25 '-'
dw DIVF-1 ;26 '/'
dw MULF-1 ;27 '*'
dw XEYF-1 ;28 X^Y
dw XE1YF-1 ;29 X^1/Y
dw PERF-1 ;30 '%'
dw LnF-1 ;31 Ln
dw LogF-1 ;32 Log
dw SQRFOTF-1 ;33 Square Foot
dw INVF-1 ;34 1/X
dw EXF-1 ;35 E^X
dw B10EXF-1 ;36 10^X
dw XE2f-1 ;37 X^2
dw XSTEPf-1 ;38 X!
dw SinF-1 ;39 Sin
dw CosF-1 ;40 Cos
dw TanF-1 ;41 Tan
dw ASinF-1 ;42 ASin
dw ACosF-1 ;43 ACos
dw ATanF-1 ;44 ATan
dw SinHF-1 ;45 SinH
dw CosHF-1 ;46 CosH
dw TanHF-1 ;47 TanH
dw ASinHF-1 ;48 ASinH
dw ACosHF-1 ;49 ACosH
dw ATanHF-1 ;50 ATanH
OutRangeTitle:
OverFlowTitle:
ZeroTitle:
db ' 范围超过',0
; db ' 溢位',0
; db ' 除数为零',0
ErrorTitle:
db ' ===错误===',0
Functable:
dw shownofun-1
dw showadd-1
dw showsub-1
dw showdiv-1
dw showmul-1
dw showxey-1
dw showxe1y-1
ShowFunction:
lda Funckey
asl ;acc 左移一位,从右边补0
tax
lda FuncTable+1,x
pha
lda Functable,x
pha
rts
public SciBank
;=====================================================
PS6 .SECTION
BankNo equ SciBank
;=====================================================
; Return from help.
SciFromHelp:
SciTimer:
jmp jmp_LMAINU
;====================================================
; 进入此MODE事件处理程式.
;====================================================
SciLoad: ;helpdat.asm中有定义
;startuart
;PUTSIO #'a'
smb0 <Float_Stat ;
SciLoadx:
lda #ds0bank
sta <drr
stz <ExpMinFlag
stz DecText+1
stz DecText
stz decexp
stz exp_flag
;====================================
ldx #6
?1: ;memory 7个字节 清除
stz Fac_Exp,x ;Fac_Exp7个字节 清除
dex
bpl ?1
stz StatusFlag ;指向科学计算器的帮助讯息首地址.
SciLoad1:
stz NumStack
SciStart:
LSetScreen 0 ; Set screen mode #1.
stz funckey ;功能键清零
jsr ClearNum
jmp jmplmainu
;====================================================
; Key press 事件处理程式.
;====================================================
SciKeyPress:
jmp_LMAINU:
LMAINU
;====================================================
; "半秒钟"事件处理程式.
;====================================================
SciHSec:
SciSec:
SciMin:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -