📄 a915.asm
字号:
; START 初始化
; MAST 主控
DISTAB: DB 0,12,25,37,50,62,75,87,100,112
KEYTAB: DB 85H,45H,25H,15H,0DH,09H,07H,06H ;+5
DB 8AH,4AH,2AH,1AH,12H,0EH,0CH,0BH ;+A
DB 80H,40H,20H,10H,08H,04H,02H,01H ;CPL
DB 7AH,0BAH,0DAH,0EAH,0F2H,0F6H,0F8H,0F9H ;-5
DB 7FH,0BFH,0DFH,0EFH,0F7H,0FBH,0FDH,0FEH
START: DI
IM 1
LD SP,5FF0H
LD B,0FFH
STAA0: NOP
LD A,0FFH
STA1: NOP
OUT (OK1),A
DEC A
JP NZ,STA1 ; -1 不等0,转
DEC B
JP NZ,STAA0 ; -1 不等0,转
LD C,PL16
SET 7,C
CALL DISIO ;1993,4,22
LD A,0C3H
LD (0038H),A
LD BC,INTR
LD A,C
LD (0039H),A
LD A,B
LD (003AH),A
LD A,0FFH
ATTP: NOP
NOP
NOP
NOP
NOP
DEC A
JP NZ,ATTP ; -1 不等0,转
LD A,90H ;8255
OUT (PD2),A
OUT (PD1),A
CALL PROG2
CALL DSLAP ;1993.6.26
JP STARD ;1993.6.26
DSLAP: LD A,0 ;DISPLAY
OUT (PC2),A
NOP
CALL STOP1
NOP
NOP
LD A,3FH
OUT (PB2),A
NOP
NOP
CALL STOP1
CALL STOP1
CALL STOP1
NOP
LD A,10H
OUT (PC2),A
NOP
NOP
NOP
CALL STOP1
CALL STOP1
CALL STOP1
NOP
NOP
NOP
NOP
NOP
NOP
LD A,0
OUT (PC2),A
CALL STOP2
CALL PROG2
LD A,0FH
OUT (PB2),A
NOP
CALL STOP1
CALL STOP1
NOP
LD A,10H
OUT (PC2),A
NOP
NOP
CALL STOP1
CALL STOP1
CALL STOP1
NOP
NOP
NOP
NOP
NOP
LD A,0
OUT (PC2),A
NOP
NOP
CALL STOP2
CALL PROG2
LD A,80H
OUT (PB2),A
NOP
NOP
LD A,10H
OUT (PC2),A
CALL STOP1
CALL STOP1
CALL STOP1
LD A,0
OUT (PC2),A
RET ;1993.6.26
STARD: LD E,0
STARTD: LD A,E
OUT (PB2),A
LD A,04
OUT (PC2),A
CALL PROG2
NOP
LD A,0
OUT (PC2),A
INC E
LD A,E
CP 7FH
JP NZ,STARTD ; 不等,转
CALL DRF532
LD BC,8191
LD HL,INTRN
LD DE,INTRN+1
LD (HL),0
LDIR
LD A,80H
LD (WADD),A
CALL CLA
LD A,1
LD (PBR),A
LD A,64
LD (SION),A
CALL PROG2
CALL ASIO
CALL A8253
LD HL,WDIS1
LD (WDIS2),HL
LD A,2FH
LD (KAB2+2),A
LD (KAB3+4),A
LD (KAB3+7),A
LD (KAB3+10),A
LD A,1
LD (KAB3),A
LD A,9
LD (KAB3+1),A
LD IY,W25
LD B,80
STW25: LD (IY),20H
INC IY
DEC B
JP NZ,STW25 ; -1 不等0,转
LD IY,W25
LD (IY+13),47
LD (IY+16),47
LD (IY+56),58
LD (IY+78),0DH
LD (IY+79),0AH
LD A,0FFH
LD (WL25),A
LD A,07
OUT (PD1),A
NOP
NOP
NOP
NOP
LD A,06
OUT (PD1),A
LD A,1
LD (PB),A
LD (KWF),A
LD (SWF),A
LD A,45
LD (W1050),A
CALL READ
LD IY,KW25
LD B,80
SWQ: LD (IY),20H
INC IY
DEC B
JP NZ,SWQ ; -1 不等0,转
LD A,0DH
LD (KW25+71),A
LD A,0AH
LD (KW25+72),A
LD BC,QUE25
LD (ADSQ),BC
LD BC,EUE25
LD (ADSE),BC
LD (ADSE2),BC
LD A,0
LD (I18),A
LD A,(EF1)
LD (EF2),A
LD A,(ER1)
LD (ER2),A ;1992,9,5
NOP ;LD A,(A2864) CP 12H JP Z,BEG28
LD A,01 ;1992,8,26
LD (EF),A
LD (EF1),A
CALL STOP8
LD A,0
LD (ER),A
LD (ER1),A
CALL STOP8
LD A,12H
LD (A2864),A
CALL STOP8
JP BEG281
BEG28: LD A,(ER1) ;1992,8,26
LD (ER),A
LD A,(EF1)
LD (EF),A
BEG281: LD IY,SW25 ;1992,7,1++++
LD B,80
SWQE: LD (IY),20H
INC IY
DEC B
JP NZ,SWQE ; -1 不等0,转
LD IY,SW25
LD (IY+62),0DH
LD (IY+63),0AH
LD A,0
LD (SW251),A
LD (SWR),A
LD (PT),A ;1992,8,21
LD E,4FH ;1993,1,18
CALL DIS2
LD E,4BH
CALL DIS2 ;1993,1,18^^^
CALL LMG ;1992,7,7
LD A,0
LD (K500),A
LD C,PL16 ;1993.4.23
SET 7,C
CALL DISIO ;1993.4.23
JP MAST
QE25: LD A,(Q12) ;1992,8,26
CP 0
JP Z,QE251 ; 等于,转
CP 1
JP Z,QE252 ; 等于,转
LD A,0
LD (Q12),A
CALL SENH
RET
QE251: INC A
LD (Q12),A
LD A,(ER)
LD (ER1),A
RET
QE252: INC A
LD (Q12),A
LD A,(EF)
LD (EF1),A
RET ;1992,9,2^^^^^
OKK: OUT (OK1),A
OUT (OK2),A
OUT (OK3),A
OUT (OK4),A
RET
STOP8: LD B,5
LD A,0FFH
STOP81: DEC A
NOP
NOP
NOP
JP NZ,STOP81 ; -1 不等0,转
DEC B
JP NZ,STOP81 ; -1 不等0,转
RET
A8253: LD A,36H
OUT (TT4),A
LD A,52
OUT (TT1),A
NOP
NOP
LD A,0
OUT (TT1),A
NOP
LD A,76H
OUT (TT4),A
LD A,52
OUT (TT2),A
NOP
NOP
LD A,00
OUT (TT2),A
NOP
LD A,0B6H
OUT (TT4),A
LD A,52
OUT (TT3),A
NOP
NOP
LD A,0
OUT (TT3),A
RET
ASIO: LD A,18H ;00无效,011通道中断,000寄存器0
OUT (SIOAC),A
LD A,14H ;00无效,010复位外部/状态中断,100寄存器4
OUT (SIOAC),A
LD A,47H ;01*16工作方式,00同步字符,01每字符1停止位,11偶效验
OUT (SIOAC),A
LD A,03H ;指向寄存器3
OUT (SIOAC),A
LD A,0C1H ;11 8位/字,0关闭外部控制,0000**,1接收器工作
OUT (SIOAC),A
LD A,05 ;指向寄存器5
OUT (SIOAC),A
LD A,0EAH ;1DTR输出低电平,11发送8位/字,
OUT (SIOAC),A
LD A,11H ;指向寄存器1
OUT (SIOAC),A
LD A,00 ;关闭所有中断,不使用WAIT/RDY信号
OUT (SIOAC),A
RET
STOP1: LD A,2
STOP11: DEC A
JP NZ,STOP11 ; -1 不等0,转
RET
STOP2: LD B,1
STOP21: LD A,0FFH
STOP22: NOP
DEC A
JP NZ,STOP22 ; -1 不等0,转
DEC B
JP NZ,STOP21 ; -1 不等0,转
RET
INTR: LD A,(INTRN)
INC A
LD (INTRN),A
LD A,01
ADD A,A
RET
MAST: LD A,0
EI
NOP
NOP
CALL STOP2 ;***********************
CALL INTR
NOP
DI
CP 0
JP Z,MAST ; 等于,转
CALL PROG2
LD A,(INTRN)
BIT 0,A
CALL NZ,PROG4
LD A,(INTRN)
AND 03
CP 2
CALL Z,PROG8
LD A,(INTRN)
AND 0FH
CP 0
CALL Z,PRO32A
LD A,(INTRN)
AND 0FH
CP 08H
CALL Z,PRO32B
JP MAST
PROG2: OUT (OK1),A
OUT (OK2),A
OUT (OK3),A
OUT (OK4),A
LD A,(K500)
INC A
LD (K500),A
CP 250
RET C
LD A,0
LD (K500),A
CALL A500
RET
A500: LD A,(K1000)
INC A
LD (K1000),A
CP 120
RET C
LD A,0
LD (K1000),A
CALL CLOCK
CALL BCL25 ;1992,9,18
CALL SIOTM
LD C,PL10 ;1993,1,15^^^
RES 7,C
CALL DISIO ;1993,1,15+++
RET
PROG4: CALL SIOT
CALL SIORE
RET
SIOT: LD A,(SIONU)
AND 0FH
CP 0AH
JP C,SIOT1 ; 小于,转
CALL SIOTS
LD A,0
LD (SIONU),A
RET
SIOT1: INC A
LD (SIONU),A
RET
SIOTS: LD A,(PTW)
CP 0
RET Z
LD HL,SIOTDS
LD B,0
LD A,(PBR)
LD C,A
ADD HL,BC
SIOTS1: IN A,(SIOAC)
BIT 2,A
JP Z,SIOTS2 ; 等于,转
PUSH HL
PUSH BC
LD C,PL19
CALL DISIO
POP BC
POP HL
LD A,(HL)
OUT (SIOAD),A
LD A,(PBR)
LD E,A
LD A,(SION)
CP E
JP NZ,SIOTS3 ; 不等,转
LD A,1
LD (PBR),A
JP SIOTS4
SIOTS3: LD A,(PBR)
INC A
LD (PBR),A
SIOTS4: LD A,(PBR)
LD E,A
LD A,(PTW)
CP E
JP NZ,SIOTSE ; 不等,转
LD A,0
LD (PTW),A
SIOTSE: LD A,0FFH
RET
SIOTS2: CALL ALMWO
LD C,PL17
CALL DISIO
JP SIOTSE
DISIO: LD A,C
OUT (PB2),A
LD A,04
OUT (PC2),A
NOP
NOP
NOP
NOP
LD A,0
OUT (PC2),A
RET
SIOTW: LD IX,SIOW+1
LD IY,SIOW
LD A,(PTW)
LD (SIOW+20),A
SIOTW0: LD A,(PBR)
LD E,A
LD A,(PTW)
CP E
JP Z,SIOTW2 ; 等于,转
LD A,(PTW)
CP 0
JP NZ,SIOTW1 ; 不等0,转
LD A,(PBR)
LD (PTW),A
SIOTW1: LD HL,SIOTDS
LD B,0
LD A,(PTW)
LD C,A
ADD HL,BC
LD A,(IX)
LD (HL),A
LD A,(SION)
LD E,A
LD A,(PTW)
CP E
JP NZ,SIOTW3 ; 不等,转
LD A,1
LD (PTW),A
JP SIOTW4
SIOTW3: LD A,(PTW)
INC A
LD (PTW),A
SIOTW4: INC IX
DEC (IY)
JP NZ,SIOTW0 ; -1 不等0,转
RET
SIOTW2: CALL ALMWO
LD C,PL19
CALL DISIO
LD A,(SIOW+20)
LD (PTW),A
RET
PROG8: NOP ;CALL COMRM
CALL OUT25
CALL KOT25
CALL SOT25 ;1992,7,1
RET
SIORE: IN A,(SIOAC) ;1992,8,21
RRC A
RET NC
IN A,(SIOAD)
LD E,A
LD A,(SIORDP)
CP 0
JP NZ,SIORE1 ; 不等0,转
LD A,E
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -