|
nedoPC.orgElectronics hobbyists community established in 2002 |
|
CGA и CF IDE адаптер на Altera MAX10
Author |
Message |
VGrad
Maniac
Joined: 18 Nov 2013 15:15 Posts: 209 Location: все оттуда ;)
|
В байт для контрольной суммы традиционнее записать значение = 0h , что бы потом не мучаться с подсчётами.
|
24 Oct 2017 10:41 |
|
|
VGrad
Maniac
Joined: 18 Nov 2013 15:15 Posts: 209 Location: все оттуда ;)
|
(С) IBM PC XT ROMBIOS | | | | Code: ;---------------------------------------------------------------- ; 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: ;-------------------------------------------------------- ; 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
| | | | |
|
24 Oct 2017 10:53 |
|
|
newold86
Devil
Joined: 30 Nov 2013 11:08 Posts: 707 Location: WWW
|
Если честно, то не понял, что Вы хотели сказать приведенными кусками BIOS'а - я соответствующий кусочек оттуда уже сам приводил раньше...
|
24 Oct 2017 11:03 |
|
|
newold86
Devil
Joined: 30 Nov 2013 11:08 Posts: 707 Location: WWW
|
Все-таки добрался на полчаса до компьютера попробовать "с чистого листа", результат все тот же загадочный: Вот эта программа останавливается на hlt по адресу 0029 Если jmp $ по адресу 000A заменить на hlt, то выполнение остановится на этом hlt К сожалению, смотреть шину сегодня времени нет...
|
24 Oct 2017 11:26 |
|
|
Mixa64
Doomed
Joined: 25 Aug 2009 07:02 Posts: 460 Location: Москва
|
А на EB FC по адресу 000A заменить, что получится?
|
24 Oct 2017 11:42 |
|
|
Vic3Dexe
Doomed
Joined: 16 Dec 2014 11:58 Posts: 370 Location: Киев
|
Вот это вот запустите. Я правильно понял, что LEDport представляет собой 8 ледов, зажигаемых побитно? Тогда должна получиться бегущая точка. Значением в dx подкрутить задержку. Есть мнение, что оно отвалится в рандомный момент. Или не запустится вообще. И опять двадцать пять. Чем вы определяете, что произошел останов на адресе 29 по hlt? Зажженый светодиод не показатель, я уже говорил. Что на шине? Проц точно в hlt или продолжает заниматься ерундой? Получится jmp на -3 байта, т.е. в середину out B3 EB = mov bl,EBh FE EB (/reg = 5) - #UD у 386+, у 8088 либо висяк, либо игнор. Хотя да, мне тоже интересно, что получится. Вангую зажженый первый светодиод, и далее тишина.
|
24 Oct 2017 13:23 |
|
|
Mixa64
Doomed
Joined: 25 Aug 2009 07:02 Posts: 460 Location: Москва
|
не-не-не, в середину out было бы EB FD
|
24 Oct 2017 13:50 |
|
|
Vic3Dexe
Doomed
Joined: 16 Dec 2014 11:58 Posts: 370 Location: Киев
|
Тьфу ты, точно, -4 байта. Ну тогда да, аналогично EB FE только с учетом out. Весь вопрос в том, как определяется точка останова.
|
24 Oct 2017 14:42 |
|
|
newold86
Devil
Joined: 30 Nov 2013 11:08 Posts: 707 Location: WWW
|
Согласен - 100% уверенности, что именно этот hlt выполнился, нет... Кстати, нет ли быстрого способа определить, в состоянии hlt находится процессор, или нет (без полноценного просмотра поведения шины анализатором) ?
|
24 Oct 2017 21:21 |
|
|
DimkaM
Maniac
Joined: 22 Jun 2005 04:35 Posts: 260 Location: МО Россия
|
светодиоды надо не аутом зажигать. а выводить ША младший байт к примеру, при чтении из фейкового биоса
|
24 Oct 2017 23:42 |
|
|
Tronix
Doomed
Joined: 18 Nov 2013 02:38 Posts: 662 Location: Москва
|
Если верить даташиту от интелъ, то когда IO/~M, DT/~R и ~SSO в единице - проц в режиме HALT (в минимальной конфигурации). В максимальной когда ~S2=0, ~S1=1, ~S0=1. Даташит: http://www.nj7p.org/Manuals/PDFs/Intel/231456-006.pdf
|
24 Oct 2017 23:55 |
|
|
Mixa64
Doomed
Joined: 25 Aug 2009 07:02 Posts: 460 Location: Москва
|
Вот жеж прогресс скаканул. Во времена, когда 86-е были большими, при отладке юзались только средства непосредственного измерения и сверка со справочниками. Сегодня - гадания на кофейной гуще и прикидки, как вывести еще один индикатор, который покажет косвенное состояние чего-то, о функционировании которого имеется и без того смутное представление.
|
25 Oct 2017 00:23 |
|
|
Tronix
Doomed
Joined: 18 Nov 2013 02:38 Posts: 662 Location: Москва
|
Хз. По справочнику jmp $ должен работать как должен, а не в качестве nop'ов.
|
25 Oct 2017 00:26 |
|
|
Tronix
Doomed
Joined: 18 Nov 2013 02:38 Posts: 662 Location: Москва
|
Кстати, После out не нужно сделать jmp $+2, как деды завещали? Или это после in делали? Нифига уже не помню, как впрочем и зачем это делали. Но что-то такое у них там с самого начала в XT с портами не заладилось -)
|
25 Oct 2017 01:25 |
|
|
Vic3Dexe
Doomed
Joined: 16 Dec 2014 11:58 Posts: 370 Location: Киев
|
Это делали между двумя out подряд, или между out, напр., в индексный порт и in из порта данных, чтобы неторопливое железо успело не только принять байт по out, а и отработать действие (напр., выставить в порт данных значение).
|
25 Oct 2017 02:24 |
|
|
Who is online |
Users browsing this forum: No registered users and 34 guests |
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot post attachments in this forum
|
|