В байт для контрольной суммы традиционнее записать значение = 0h , что бы потом не мучаться с подсчётами.newold86 wrote:Спасибо за участие, но вроде я это все уже перепробовал... Вот мой код (последняя вариация на тему):
Что меня раздражает в таких случаях - при всей, на первый взгляд, таинственности происходящего, причина всегда оказывается совершенно неинтересной, а вот времени теряется куча...Code: Select all
...... org 0fffh db 0ffh ; checksum byte CODE EndS
CGA и CF IDE адаптер на Altera MAX10
Moderator: Shaos
-
- Maniac
- Posts: 208
- Joined: 18 Nov 2013 15:15
- Location: все оттуда ;)
Re: CGA и CF IDE адаптер на Altera MAX10
-
- Maniac
- Posts: 208
- Joined: 18 Nov 2013 15:15
- Location: все оттуда ;)
Re: CGA и CF IDE адаптер на Altera MAX10
(С) IBM PC XT ROMBIOSTronix wrote:Вот не могу сказать. Вроде-бы (читать: одна бабка другой сказала) что-то всплывает в моей памяти, что некоторые BIOS передают управление не на 0x04 оффсет, а куда-то дальше. И/или дополнительно проверяют EB четвертым байтом.newold86 wrote:Кстати, а вот это вообще откуда (необходимость обязательно сделать jmp) ?Tronix wrote:Потом вроде первым делом надо сделать jmp short куда-нибудь
Или я путаю с ROM-basic'ом. Или я вообще все путаю.
Code: Select all
;----------------------------------------------------------------
; CHECK FOR OPTIONAL ROM FROM C8000->F4000 IN 2K BLOCKS :
; (A VALID MODULE HAS '55AA' IN THE FIRST 2 LOCATIONS, :
; LENGTH INDICATOR (LENGTH/512) IN THE 3D LOCATION AND :
; TEST/INIT. CODE STARTING IN THE 4TH LOCATION.) :
;----------------------------------------------------------------
ROM_SCAN:
MOV DX,0C800H ; SET BEGINNING ADDRESS
ROM_SCAN_1:
MOV DS,DX
SUB BX,BX ; SET BX=0000
MOV AX,[BX] ; GET 1ST WORD FROM MODULE
PUSH BX
POP BX ; BUS SETTLING
CMP AX,0AA55H ; = TO ID WORD?
JNZ NEXT_ROM ; PROCEED TO NEXT ROM IF NOT
CALL ROM_CHECK ; GO CHECK OUT MODULE
JMP ARE_WE_DONE ; CHECK FOR END OF ROM SPACE
NEXT_ROM:
ADD DX,0080H ; POINT TO NEXT 2K ADDRESS
ARE_WE_DONE:
CMP DX,0F600H ; AT F6000 YET?
JL ROM_SCAN_1 ; GO CHECK ANOTHER ADD. IF NOT
JMP BASE_ROM_CHK ; GO CHECK BASIC ROM
;------------------------------------------------------------------------
; A CHECKSUM IS DONE FOR THE 4 ROS MODULES CONTAINING BASIC CODE :
;------------------------------------------------------------------------
BASE_ROM_CHK:
MOV AH,4 ; NO. OF ROS MODULES TO CHECK
E4:
SUB BX,BX ; SETUP STARTING ROS ADDR
MOV DS,DX
; CHECK ROS
CALL ROS_CHECKSUM
JE E5 ; CONTINUE IF OK
CALL ROM_ERR ; POST ERROR
E5:
ADD DX,0200H ; POINT TO NEXT 8K MODULE
DEC AH ; ANY MORE TO DO?
JNZ E4 ; YES - CONTINUE
Code: Select all
;--------------------------------------------------------
; THIS ROUTINE CHECKSUMS OPTIONAL ROM MODULES AND :
; IF CHECKSUM IS OK, CALLS INIT/TEST CODE IN MODULE :
;--------------------------------------------------------
ROM_CHECK PROC NEAR
MOV AX,DATA ; POINT ES TO DATA AREA
MOV ES,AX
SUB AH,AH ; ZERO OUT AH
MOV AL,[BX+2] ; GET LENGTH INDICATOR
MOV CL,09H ; MULTIPLY BY 512
SHL AX,CL
MOV CX,AX ; SET COUNT
PUSH CX ; SAVE COUNT
MOV CX,4 ; ADJUST
SHR AX,CL
ADD DX,AX ; SET POINTER TO NEXT MODULE
POP CX ; RETRIVE COUNT
CALL ROS_CHECKSUM_CNT ; DO CHECKSUM
JZ ROM_CHECK_1
CALL ROM_ERR ; POST CHECKSUM ERROR
JMP ROM_CHECK_END ; AND EXIT
ROM_CHECK_1:
PUSH DX ; SAVE POINTER
MOV ES:IO_ROM_INIT,0003H ; LOAD OFFSET
MOV ES:IO_ROM_SEG,DS ; LOAD SEGMENT
CALL DWORD PTR ES:IO_ROM_INIT ; CALL INIT./TEST ROUTINE
POP DX
ROM_CHECK_END:
RET ; RETURN TO CALLER
ROM_CHECK ENDP
-
- Devil
- Posts: 716
- Joined: 30 Nov 2013 11:08
- Location: WWW
Re: CGA и CF IDE адаптер на Altera MAX10
Если честно, то не понял, что Вы хотели сказать приведенными кусками BIOS'а - я соответствующий кусочек оттуда уже сам приводил раньше...VGrad wrote: (С) IBM PC XT ROMBIOS
-
- Devil
- Posts: 716
- Joined: 30 Nov 2013 11:08
- Location: WWW
Re: CGA и CF IDE адаптер на Altera MAX10
Все-таки добрался на полчаса до компьютера попробовать "с чистого листа", результат все тот же загадочный:
Вот эта программа останавливается на hlt по адресу 0029
Если jmp $ по адресу 000A заменить на hlt, то выполнение остановится на этом hlt
К сожалению, смотреть шину сегодня времени нет...
Code: Select all
0000 CODE Segment
Assume cs:CODE
org 0h
0000 55 AA db 55h, 0AAh ; ROM extension signature
0002 08 db 8 ; length in 512 bytes - 4K
0003 Start:
0003 SDbios Proc far
0003 FA cli
0004 B0 01 mov al, 01b
0006 33 C9 xor cx, cx
0008 E6 B3 out LEDport, al
000A EB FE jmp $
000C EB 17 jmp short BIOSstart
000E B0 02 mov al, 10b
0010 E6 B3 out LEDport, al
0012 F4 hlt
0013 53 44 20 63 61 72 db 'SD card BIOS v 0.1'
64 20 42 49 4F 53
20 76 20 30 2E 31
0025 BIOSstart:
0025 B0 03 mov al, 11b
0027 E6 B3 out LEDport, al
0029 F4 hlt
002A CB retf
002B SDbios EndP
org 4096 - 16
0FF0 45 20 6F 66 20 45 db 'E of ExtROM 04'
78 74 52 4F 4D 20
30 34
org 0fffh
0FFF FF db 0ffh ; checksum byte
1000 CODE EndS
Если jmp $ по адресу 000A заменить на hlt, то выполнение остановится на этом hlt
К сожалению, смотреть шину сегодня времени нет...
-
- Doomed
- Posts: 480
- Joined: 25 Aug 2009 07:02
- Location: Москва
Re: CGA и CF IDE адаптер на Altera MAX10
А на EB FC по адресу 000A заменить, что получится?
-
- Doomed
- Posts: 370
- Joined: 16 Dec 2014 11:58
- Location: Киев
Re: CGA и CF IDE адаптер на Altera MAX10
Code: Select all
mov cx,-1
mov al,1
outloop: mov dx,8000h
out LEDport,al
xchg cx,dx
inloop: nop ;dummy для обхода неработающих EB FE и иже с ними
loop inloop
shl al,1
mov cx,dx
loop outloop
cli
jmp $
hlt
Есть мнение, что оно отвалится в рандомный момент. Или не запустится вообще.
И опять двадцать пять. Чем вы определяете, что произошел останов на адресе 29 по hlt? Зажженый светодиод не показатель, я уже говорил. Что на шине? Проц точно в hlt или продолжает заниматься ерундой?
Получится jmp на -3 байта, т.е. в середину outА на EB FC по адресу 000A заменить, что получится?
B3 EB = mov bl,EBh
FE EB (/reg = 5) - #UD у 386+, у 8088 либо висяк, либо игнор.
Хотя да, мне тоже интересно, что получится. Вангую зажженый первый светодиод, и далее тишина.
-
- Doomed
- Posts: 480
- Joined: 25 Aug 2009 07:02
- Location: Москва
Re: CGA и CF IDE адаптер на Altera MAX10
не-не-не, в середину out было бы EB FD
-
- Doomed
- Posts: 370
- Joined: 16 Dec 2014 11:58
- Location: Киев
Re: CGA и CF IDE адаптер на Altera MAX10
Тьфу ты, точно, -4 байта.Mixa64 wrote:не-не-не, в середину out было бы EB FD
Ну тогда да, аналогично EB FE только с учетом out.
Весь вопрос в том, как определяется точка останова.
-
- Devil
- Posts: 716
- Joined: 30 Nov 2013 11:08
- Location: WWW
Re: CGA и CF IDE адаптер на Altera MAX10
Согласен - 100% уверенности, что именно этот hlt выполнился, нет...Vic3Dexe wrote:И опять двадцать пять. Чем вы определяете, что произошел останов на адресе 29 по hlt? Зажженый светодиод не показатель, я уже говорил. Что на шине? Проц точно в hlt или продолжает заниматься ерундой?
Кстати, нет ли быстрого способа определить, в состоянии hlt находится процессор, или нет (без полноценного просмотра поведения шины анализатором) ?
-
- Maniac
- Posts: 261
- Joined: 22 Jun 2005 04:35
- Location: МО Россия
Re: CGA и CF IDE адаптер на Altera MAX10
светодиоды надо не аутом зажигать.
а выводить ША младший байт к примеру, при чтении из фейкового биоса
а выводить ША младший байт к примеру, при чтении из фейкового биоса
-
- Doomed
- Posts: 662
- Joined: 18 Nov 2013 02:38
- Location: Москва
Re: CGA и CF IDE адаптер на Altera MAX10
Если верить даташиту от интелъ, то когда IO/~M, DT/~R и ~SSO в единице - проц в режиме HALT (в минимальной конфигурации). В максимальной когда ~S2=0, ~S1=1, ~S0=1. Даташит: http://www.nj7p.org/Manuals/PDFs/Intel/231456-006.pdfnewold86 wrote: Кстати, нет ли быстрого способа определить, в состоянии hlt находится процессор, или нет (без полноценного просмотра поведения шины анализатором) ?
-
- Doomed
- Posts: 480
- Joined: 25 Aug 2009 07:02
- Location: Москва
Re: CGA и CF IDE адаптер на Altera MAX10
Вот жеж прогресс скаканул. Во времена, когда 86-е были большими, при отладке юзались только средства непосредственного измерения и сверка со справочниками. Сегодня - гадания на кофейной гуще и прикидки, как вывести еще один индикатор, который покажет косвенное состояние чего-то, о функционировании которого имеется и без того смутное представление.
-
- Doomed
- Posts: 662
- Joined: 18 Nov 2013 02:38
- Location: Москва
Re: CGA и CF IDE адаптер на Altera MAX10
Хз. По справочнику jmp $ должен работать как должен, а не в качестве nop'ов.
-
- Doomed
- Posts: 662
- Joined: 18 Nov 2013 02:38
- Location: Москва
Re: CGA и CF IDE адаптер на Altera MAX10
Кстати,
После out не нужно сделать jmp $+2, как деды завещали? Или это после in делали? Нифига уже не помню, как впрочем и зачем это делали. Но что-то такое у них там с самого начала в XT с портами не заладилось -)
Code: Select all
0008 E6 B3 out LEDport, al
000A EB FE jmp $
-
- Doomed
- Posts: 370
- Joined: 16 Dec 2014 11:58
- Location: Киев
Re: CGA и CF IDE адаптер на Altera MAX10
Это делали между двумя out подряд, или между out, напр., в индексный порт и in из порта данных, чтобы неторопливое железо успело не только принять байт по out, а и отработать действие (напр., выставить в порт данных значение).Tronix wrote:После out не нужно сделать jmp $+2, как деды завещали?