nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 19 Apr 2024 16:12



Reply to topic  [ 258 posts ]  Go to page Previous  1 ... 3, 4, 5, 6, 7, 8, 9 ... 18  Next
CGA и CF IDE адаптер на Altera MAX10 
Author Message
Maniac

Joined: 18 Nov 2013 15:15
Posts: 209
Location: все оттуда ;)
Reply with quote
newold86 wrote:
Спасибо за участие, но вроде я это все уже перепробовал... Вот мой код (последняя вариация на тему):

Code:
......
            org      0fffh
            db      0ffh            ; checksum byte
         
CODE         EndS


Что меня раздражает в таких случаях - при всей, на первый взгляд, таинственности происходящего, причина всегда оказывается совершенно неинтересной, а вот времени теряется куча...

В байт для контрольной суммы традиционнее записать значение = 0h , что бы потом не мучаться с подсчётами.


24 Oct 2017 10:41
Profile
Maniac

Joined: 18 Nov 2013 15:15
Posts: 209
Location: все оттуда ;)
Reply with quote
Tronix wrote:
newold86 wrote:
Tronix wrote:
Потом вроде первым делом надо сделать jmp short куда-нибудь

Кстати, а вот это вообще откуда (необходимость обязательно сделать jmp) ?


Вот не могу сказать. Вроде-бы (читать: одна бабка другой сказала) что-то всплывает в моей памяти, что некоторые BIOS передают управление не на 0x04 оффсет, а куда-то дальше. И/или дополнительно проверяют EB четвертым байтом.
Или я путаю с ROM-basic'ом. Или я вообще все путаю. :mrgreen:


(С) 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
Profile
Devil

Joined: 30 Nov 2013 11:08
Posts: 707
Location: WWW
Reply with quote
VGrad wrote:
(С) IBM PC XT ROMBIOS

Если честно, то не понял, что Вы хотели сказать приведенными кусками BIOS'а - я соответствующий кусочек оттуда уже сам приводил раньше...


24 Oct 2017 11:03
Profile
Devil

Joined: 30 Nov 2013 11:08
Posts: 707
Location: WWW
Reply with quote
Все-таки добрался на полчаса до компьютера попробовать "с чистого листа", результат все тот же загадочный:

Code:
 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



Вот эта программа останавливается на hlt по адресу 0029
Если jmp $ по адресу 000A заменить на hlt, то выполнение остановится на этом hlt

К сожалению, смотреть шину сегодня времени нет...


24 Oct 2017 11:26
Profile
Doomed

Joined: 25 Aug 2009 07:02
Posts: 459
Location: Москва
Reply with quote
А на EB FC по адресу 000A заменить, что получится?


24 Oct 2017 11:42
Profile
Doomed

Joined: 16 Dec 2014 11:58
Posts: 370
Location: Киев
Reply with quote
Code:
         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

Вот это вот запустите. Я правильно понял, что LEDport представляет собой 8 ледов, зажигаемых побитно? Тогда должна получиться бегущая точка. Значением в dx подкрутить задержку.
Есть мнение, что оно отвалится в рандомный момент. Или не запустится вообще.

И опять двадцать пять. Чем вы определяете, что произошел останов на адресе 29 по hlt? Зажженый светодиод не показатель, я уже говорил. Что на шине? Проц точно в hlt или продолжает заниматься ерундой?

Quote:
А на EB FC по адресу 000A заменить, что получится?

Получится jmp на -3 байта, т.е. в середину out
B3 EB = mov bl,EBh
FE EB (/reg = 5) - #UD у 386+, у 8088 либо висяк, либо игнор.

Хотя да, мне тоже интересно, что получится. Вангую зажженый первый светодиод, и далее тишина.


24 Oct 2017 13:23
Profile
Doomed

Joined: 25 Aug 2009 07:02
Posts: 459
Location: Москва
Reply with quote
не-не-не, в середину out было бы EB FD


24 Oct 2017 13:50
Profile
Doomed

Joined: 16 Dec 2014 11:58
Posts: 370
Location: Киев
Reply with quote
Mixa64 wrote:
не-не-не, в середину out было бы EB FD

Тьфу ты, точно, -4 байта.
Ну тогда да, аналогично EB FE только с учетом out.

Весь вопрос в том, как определяется точка останова.


24 Oct 2017 14:42
Profile
Devil

Joined: 30 Nov 2013 11:08
Posts: 707
Location: WWW
Reply with quote
Vic3Dexe wrote:
И опять двадцать пять. Чем вы определяете, что произошел останов на адресе 29 по hlt? Зажженый светодиод не показатель, я уже говорил. Что на шине? Проц точно в hlt или продолжает заниматься ерундой?

Согласен - 100% уверенности, что именно этот hlt выполнился, нет...
Кстати, нет ли быстрого способа определить, в состоянии hlt находится процессор, или нет (без полноценного просмотра поведения шины анализатором) ?


24 Oct 2017 21:21
Profile
Maniac

Joined: 22 Jun 2005 04:35
Posts: 260
Location: МО Россия
Reply with quote
светодиоды надо не аутом зажигать.
а выводить ША младший байт к примеру, при чтении из фейкового биоса


24 Oct 2017 23:42
Profile ICQ
Doomed

Joined: 18 Nov 2013 02:38
Posts: 662
Location: Москва
Reply with quote
newold86 wrote:
Кстати, нет ли быстрого способа определить, в состоянии hlt находится процессор, или нет (без полноценного просмотра поведения шины анализатором) ?


Если верить даташиту от интелъ, то когда IO/~M, DT/~R и ~SSO в единице - проц в режиме HALT (в минимальной конфигурации). В максимальной когда ~S2=0, ~S1=1, ~S0=1. Даташит: http://www.nj7p.org/Manuals/PDFs/Intel/231456-006.pdf

_________________
https://t.me/tronix_blog


24 Oct 2017 23:55
Profile
Doomed

Joined: 25 Aug 2009 07:02
Posts: 459
Location: Москва
Reply with quote
Вот жеж прогресс скаканул. Во времена, когда 86-е были большими, при отладке юзались только средства непосредственного измерения и сверка со справочниками. Сегодня - гадания на кофейной гуще и прикидки, как вывести еще один индикатор, который покажет косвенное состояние чего-то, о функционировании которого имеется и без того смутное представление.


25 Oct 2017 00:23
Profile
Doomed

Joined: 18 Nov 2013 02:38
Posts: 662
Location: Москва
Reply with quote
Хз. По справочнику jmp $ должен работать как должен, а не в качестве nop'ов.

_________________
https://t.me/tronix_blog


25 Oct 2017 00:26
Profile
Doomed

Joined: 18 Nov 2013 02:38
Posts: 662
Location: Москва
Reply with quote
Кстати,

Code:
0008  E6 B3               out      LEDport, al
 000A  EB FE               jmp      $


После out не нужно сделать jmp $+2, как деды завещали? Или это после in делали? Нифига уже не помню, как впрочем и зачем это делали. Но что-то такое у них там с самого начала в XT с портами не заладилось -)

_________________
https://t.me/tronix_blog


25 Oct 2017 01:25
Profile
Doomed

Joined: 16 Dec 2014 11:58
Posts: 370
Location: Киев
Reply with quote
Tronix wrote:
После out не нужно сделать jmp $+2, как деды завещали?

Это делали между двумя out подряд, или между out, напр., в индексный порт и in из порта данных, чтобы неторопливое железо успело не только принять байт по out, а и отработать действие (напр., выставить в порт данных значение).


25 Oct 2017 02:24
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 258 posts ]  Go to page Previous  1 ... 3, 4, 5, 6, 7, 8, 9 ... 18  Next

Who is online

Users browsing this forum: No registered users and 22 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

Search for:
Jump to:  
cron
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.