📄 l55b4.asm
字号:
; =========================================================================
; MAIN BOOT. PV` PapuaSoft & PapuaHard 2005
; =========================================================================
; ---------------------------------------------------------------------------
$SET (WriteBuffered=1)
$SET (AX75=1)
$SET (A75=0)
$SET (A70=0)
$SET (A65=0)
$SET (A60=0)
$SET (S55=0)
$SET (M55=0)
$SET (C55=0)
$SET (A55=0) ;=C55!!!
$SET (A50=0)
$SET (ENABLE_INT3=0)
$Mod167
$IF NOT TINY
$SEGMENTED
$ENDIF
$INCLUDE (reg167n.a66)
word_3F00 EQU 03F00H
word_3F02 EQU 03F02H
word_3F04 EQU 03F04H
word_3F08 EQU 03F08H
word_3F0A EQU 03F0AH
word_3F0C EQU 03F0CH
word_3F0E EQU 03F0EH
word_3F10 EQU 03F10H
T3INT EQU 08CH
;word_8000 EQU 0
;word_8004 EQU 4
$IF AX75
;AX75 FlashID: 0001/227E-2221-2201
;Size: 16Mb, WriteBuffer: 32 bytes
;Region(1): Blocks 128, Size 128Kb
;RAM Size: 256Kb
DEFFlashSize EQU 1000H ; 16Mb
DEFCFISegs EQU 01H
DEFCFISegN1 EQU 007FH ; CFISegN1+1
DEFCFISegS1 EQU 0200H ; CFISegS1*256 128Kb
$ENDIF
$IF A75
DEFFlashSize EQU 0800H ; 8Mb
DEFCFISegs EQU 01H
DEFCFISegN1 EQU 003FH ; CFISegN1+1
DEFCFISegS1 EQU 0200H ; CFISegS1*256 128Kb
$ENDIF
$IF A70
;A70 FlashID: 0001/227E-220C-2201
;Size: 8Mb, WriteBuffer: 32 bytes
;Region(1): Blocks 128, Size 64Kb
DEFFlashSize EQU 0800H ; 8Mb
DEFCFISegs EQU 01H
DEFCFISegN1 EQU 007FH ; CFISegN1+1
DEFCFISegS1 EQU 0100H ; CFISegS1*256 64Kb
$ENDIF
$IF A60
;SIEMENS A62 lg98 Sw02
;FlashID: 0001/227E-220C-2201
;Flash Size: 8Mb, WriteBuffer: 32 bytes
;Region(1): Blocks 128, Size 64Kb
;RAM Size: 512Kb
;Start EEPROM segments at addres 0xFC0000
;SIEMENS A60 lg91 Sw23
;FlashID: 0001/227E-220C-2201
;Flash Size: 8Mb, WriteBuffer: 32 bytes
;Region(1): Blocks 128, Size 64Kb
;RAM Size: 512Kb
DEFFlashSize EQU 0800H ; 8Mb
DEFCFISegs EQU 01H
DEFCFISegN1 EQU 003FH ; CFISegN1+1
DEFCFISegS1 EQU 0100H ; CFISegS1*256 64Kb
$ENDIF
$IF A65
;SIEMENS A65 lg91 Sw15
;FlashID: 0001/227E-2212-2200
;Flash Size: 16Mb, WriteBuffer: 32 bytes
;Region(1): Blocks 256, Size 64Kb
;RAM Size: 512Kb
;Start EEPROM segments at addres 0x7C0000
DEFFlashSize EQU 1000H ; 16Mb
DEFCFISegs EQU 01H
DEFCFISegN1 EQU 007FH ; CFISegN1+1
DEFCFISegS1 EQU 0100H ; CFISegS1*256 256Kb
$ENDIF
$IF C60
;SIEMENS C60 lg95
;FlashID: 0001/227E-2212-2200
;Size: 16Mb, WriteBuffer: 32 bytes
;Region(1): Blocks 256, Size 64Kb
DEFFlashSize EQU 1000H ; 16Mb
DEFCFISegs EQU 01H
DEFCFISegN1 EQU 00FFH ; CFISegN1+1
DEFCFISegS1 EQU 0100H ; CFISegS1*256 64Kb
$ENDIF
$IF S55
;S55 FlashID: 0020/8810 (0020/88BA)
;Size: 12Mb, WriteBuffer: 8 bytes
;Region(1): Blocks 63, Size 64Kb
;Region(2): Blocks 8, Size 8Kb
;Region(3): Blocks 127, Size 64Kb
;Region(4): Blocks 8, Size 8Kb
;RAM Size: 1024Kb
;---
;SL55 FlashID: 0089/8854 (0089/0016)
;Flash Size: 12Mb, WriteBuffer: 32 bytes
;Region(1): Blocks 32, Size 128Kb
;Region(2): Blocks 127, Size 64Kb
;Region(3): Blocks 8, Size 8Kb
DEFFlashSize EQU 0C00H ; 12Mb
DEFCFISegs EQU 04H
DEFCFISegN1 EQU 003EH ; CFISegN1+1 63
DEFCFISegS1 EQU 0100H ; CFISegS1*256 64Kb
DEFCFISegN2 EQU 0007H ; CFISegN2+1 8
DEFCFISegS2 EQU 0020H ; CFISegS2*256 8Kb
DEFCFISegN3 EQU 007EH ; CFISegN3+1 127
DEFCFISegS3 EQU 0100H ; CFISegS3*256 64Kb
DEFCFISegN4 EQU 0007H ; CFISegN4+1 8
DEFCFISegS4 EQU 0020H ; CFISegS4*256 8Kb
$ENDIF
$IF M55
;SIEMENS M55 lg2 Sw10
;FlashID: 0001/227E-2212-2200
;Flash Size: 16Mb, WriteBuffer: 32 bytes
;Region(1): Blocks 256, Size 64Kb
;RAM Size: 512Kb
;Start EEPROM segments at addres 0xFC0000
DEFFlashSize EQU 01000H ; 16Mb
DEFCFISegs EQU 01H
DEFCFISegN1 EQU 007FH ; CFISegN1+1
DEFCFISegS1 EQU 0100H ; CFISegS1*256 128Kb
$ENDIF
$IF C55
;C55 lg91
;FlashID: 0089/0017
;Size: 8Mb, WriteBuffer: 32 bytes
;Region(1): Blocks 64, Size 128Kb
DEFFlashSize EQU 0800H ; 8Mb
DEFCFISegs EQU 01H
DEFCFISegN1 EQU 003FH ; CFISegN1+1
DEFCFISegS1 EQU 0200H ; CFISegS1*256 128Kb
$ENDIF
$IF A55
;A55 FlashID: 0089/0017
;Size: 8Mb, WriteBuffer: 32 bytes
;Region(1): Blocks 64, Size 128Kb
;RAM Size: 512Kb
DEFFlashSize EQU 0800H ; 8Mb
DEFCFISegs EQU 01H
DEFCFISegN1 EQU 003FH ; CFISegN1+1
DEFCFISegS1 EQU 0200H ; CFISegS1*256 128Kb
$ENDIF
$IF A50
;SIEMENS A50
;FlashID: 0020/88BA
;Flash Size: 4Mb, WriteBuffer: 32 bytes
;Start EEPROM segments at addres 0xBF0000
DEFFlashSize EQU 0400H ; 4Mb
DEFCFISegs EQU 01H
DEFCFISegN1 EQU 001FH ; CFISegN1+1
DEFCFISegS1 EQU 0200H ; CFISegS1*256 128Kb
$ENDIF
Boot4 Section Code Word At 200h
a7xboot4 Proc near
mov DPP0, #0 ; assume dpp0: 0 (page 0x0)
mov DPP3, #3 ; assume dpp1: 3 (page 0xC000)
; bclr ROMEN
; diswdt
; mov DPP0, #0 ; assume dpp0: 0 (page 0x0)
; mov CP, #0FC00h
; mov DPP0, #0 ; assume dpp0: 0 (page 0x0)
; mov DPP1, #3 ; assume dpp1: 3 (page 0xC000)
; mov DPP2, #80h ; assume dpp2: 80h (page 0x200000)
; einit
$IF ENABLE_INT3
mov r1, #T3INT
mov r2, #0FAh
mov r3, #Int_T3
mov [r1+#0], r2
mov [r1+#2], r3
bset IEN
$ENDIF
$IF M55
mov P8, #0FFFFh
mov DP8, #0FFFFh
$ENDIF
$IF A70 or A75 or AX75
mov word_FF38, #10h
$IF A75 or AX75
mov CCM4, #20h
$ENDIF
$IF A70
mov CCM4, #14h
$ENDIF
$ENDIF
call Read_FlashID_FSN
mov r4, #5650h ;'PV'
call Send_r4
mov r3, FlashSize
mov DPP1, #0E8h ;0E8h<<14=0x3A0000
jb r3.12, loc_a16m
mov DPP1, #2E8h ;2E8h<<14=0xBA0000
loc_a16m:
call FindEELITE_
SendOkAndNextCmd:
mov r4, #4B4Fh ;'OK'
SendR4AndNextCmd:
call Send_r4
Next_cmd:
call Rx_rl3
cmp rl3, #52h ; 'R' ReadData
jmp cc_Z, Cmd_R
cmp rl3, #46h ; 'F' FlashWriteSeg
jmp cc_Z, Cmd_F
cmp rl3, #49h ; 'I' FlashInfo
jmp cc_Z, Cmd_I
cmp rl3, #54h ; 'T' Terminate
jmp cc_Z, Cmd_T
cmp rl3, #4Ah ; 'J' Joke
jmp cc_Z, Cmd_J
cmp rl3, #42h ; 'B' Baud
jmp cc_Z, Cmd_B
cmp rl3, #58h ; 'X' Test
jmp cc_Z, Cmd_X
cmp rl3, #47h ; 'G' Go
jmp cc_Z, Cmd_G
mov r4, #4355h ;#aUnknownCommand
cmp rl3, #41h ; 'A'
jmp cc_NZ, SendR4AndNextCmd
mov rl3, #52h ;'R'
SendRl3AndNextCmd:
call Tx_rl3
jmp Next_cmd
; --------------- S U B R O U T I N E ---------------------------------------
Cmd_G:
call Rx_r6r7
calls 0,#GoSub
jmp SendR4AndNextCmd
GoSub:
push r6
push r7
rets
; --------------- S U B R O U T I N E ---------------------------------------
Cmd_T:
mov r4, #4B4Fh ;'OK'
call Send_r4
srst
Tx_rl2:
mov rl3, rl2
jmp Tx_rl3
; --------------- S U B R O U T I N E ---------------------------------------
Cmd_B:
call Rx_r1_r7
extr #2
$IF AX75 or A75 or A70
mov PP0, r1
mov PP1, r7
$ELSE
mov S0BG, r1
mov word_FEB6, r7
$ENDIF
call Rx_rl3
call Tx_rl3
jmp SendOkAndNextCmd
; --------------- S U B R O U T I N E ---------------------------------------
EntryNotFound:
mov r4, #4645h ; "Entry not Found"
jmp SendR4AndNextCmd
; --------------- S U B R O U T I N E ---------------------------------------
Rx_r1_r7:
call Rx_rl3
mov r1, r3
call Rx_rl3
mov rh1, rl3
call Rx_rl3
mov r7, r3
call Rx_rl3
mov rh7, rl3
ret
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -