CGA и CF IDE адаптер на Altera MAX10

16-битные ПЦ-совместимые компьютеры с процессорами 8086/8088/80286 работающие под управлением ДОС

Moderator: Shaos

VGrad
Maniac
Posts: 208
Joined: 18 Nov 2013 15:15
Location: все оттуда ;)

Re: CGA и CF IDE адаптер на Altera MAX10

Post by VGrad »

newold86 wrote:Спасибо за участие, но вроде я это все уже перепробовал... Вот мой код (последняя вариация на тему):

Code: Select all

......
				org		0fffh
				db		0ffh				; checksum byte
			
CODE			EndS
Что меня раздражает в таких случаях - при всей, на первый взгляд, таинственности происходящего, причина всегда оказывается совершенно неинтересной, а вот времени теряется куча...
В байт для контрольной суммы традиционнее записать значение = 0h , что бы потом не мучаться с подсчётами.
VGrad
Maniac
Posts: 208
Joined: 18 Nov 2013 15:15
Location: все оттуда ;)

Re: CGA и CF IDE адаптер на Altera MAX10

Post by VGrad »

Tronix wrote:
newold86 wrote:
Tronix wrote:Потом вроде первым делом надо сделать jmp short куда-нибудь
Кстати, а вот это вообще откуда (необходимость обязательно сделать jmp) ?
Вот не могу сказать. Вроде-бы (читать: одна бабка другой сказала) что-то всплывает в моей памяти, что некоторые BIOS передают управление не на 0x04 оффсет, а куда-то дальше. И/или дополнительно проверяют EB четвертым байтом.
Или я путаю с ROM-basic'ом. Или я вообще все путаю. :mrgreen:
(С) IBM PC XT ROMBIOS

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
newold86
Devil
Posts: 716
Joined: 30 Nov 2013 11:08
Location: WWW

Re: CGA и CF IDE адаптер на Altera MAX10

Post by newold86 »

VGrad wrote: (С) IBM PC XT ROMBIOS
Если честно, то не понял, что Вы хотели сказать приведенными кусками BIOS'а - я соответствующий кусочек оттуда уже сам приводил раньше...
newold86
Devil
Posts: 716
Joined: 30 Nov 2013 11:08
Location: WWW

Re: CGA и CF IDE адаптер на Altera MAX10

Post by newold86 »

Все-таки добрался на полчаса до компьютера попробовать "с чистого листа", результат все тот же загадочный:

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

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

К сожалению, смотреть шину сегодня времени нет...
Mixa64
Doomed
Posts: 480
Joined: 25 Aug 2009 07:02
Location: Москва

Re: CGA и CF IDE адаптер на Altera MAX10

Post by Mixa64 »

А на EB FC по адресу 000A заменить, что получится?
Vic3Dexe
Doomed
Posts: 370
Joined: 16 Dec 2014 11:58
Location: Киев

Re: CGA и CF IDE адаптер на Altera MAX10

Post by Vic3Dexe »

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

И опять двадцать пять. Чем вы определяете, что произошел останов на адресе 29 по hlt? Зажженый светодиод не показатель, я уже говорил. Что на шине? Проц точно в hlt или продолжает заниматься ерундой?
А на EB FC по адресу 000A заменить, что получится?
Получится jmp на -3 байта, т.е. в середину out
B3 EB = mov bl,EBh
FE EB (/reg = 5) - #UD у 386+, у 8088 либо висяк, либо игнор.

Хотя да, мне тоже интересно, что получится. Вангую зажженый первый светодиод, и далее тишина.
Mixa64
Doomed
Posts: 480
Joined: 25 Aug 2009 07:02
Location: Москва

Re: CGA и CF IDE адаптер на Altera MAX10

Post by Mixa64 »

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

Re: CGA и CF IDE адаптер на Altera MAX10

Post by Vic3Dexe »

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

Весь вопрос в том, как определяется точка останова.
newold86
Devil
Posts: 716
Joined: 30 Nov 2013 11:08
Location: WWW

Re: CGA и CF IDE адаптер на Altera MAX10

Post by newold86 »

Vic3Dexe wrote:И опять двадцать пять. Чем вы определяете, что произошел останов на адресе 29 по hlt? Зажженый светодиод не показатель, я уже говорил. Что на шине? Проц точно в hlt или продолжает заниматься ерундой?
Согласен - 100% уверенности, что именно этот hlt выполнился, нет...
Кстати, нет ли быстрого способа определить, в состоянии hlt находится процессор, или нет (без полноценного просмотра поведения шины анализатором) ?
DimkaM
Maniac
Posts: 261
Joined: 22 Jun 2005 04:35
Location: МО Россия

Re: CGA и CF IDE адаптер на Altera MAX10

Post by DimkaM »

светодиоды надо не аутом зажигать.
а выводить ША младший байт к примеру, при чтении из фейкового биоса
Tronix
Doomed
Posts: 662
Joined: 18 Nov 2013 02:38
Location: Москва

Re: CGA и CF IDE адаптер на Altera MAX10

Post by Tronix »

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
Mixa64
Doomed
Posts: 480
Joined: 25 Aug 2009 07:02
Location: Москва

Re: CGA и CF IDE адаптер на Altera MAX10

Post by Mixa64 »

Вот жеж прогресс скаканул. Во времена, когда 86-е были большими, при отладке юзались только средства непосредственного измерения и сверка со справочниками. Сегодня - гадания на кофейной гуще и прикидки, как вывести еще один индикатор, который покажет косвенное состояние чего-то, о функционировании которого имеется и без того смутное представление.
Tronix
Doomed
Posts: 662
Joined: 18 Nov 2013 02:38
Location: Москва

Re: CGA и CF IDE адаптер на Altera MAX10

Post by Tronix »

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

Re: CGA и CF IDE адаптер на Altera MAX10

Post by Tronix »

Кстати,

Code: Select all

0008  E6 B3               out      LEDport, al
 000A  EB FE               jmp      $
После out не нужно сделать jmp $+2, как деды завещали? Или это после in делали? Нифига уже не помню, как впрочем и зачем это делали. Но что-то такое у них там с самого начала в XT с портами не заладилось -)
Vic3Dexe
Doomed
Posts: 370
Joined: 16 Dec 2014 11:58
Location: Киев

Re: CGA и CF IDE адаптер на Altera MAX10

Post by Vic3Dexe »

Tronix wrote:После out не нужно сделать jmp $+2, как деды завещали?
Это делали между двумя out подряд, или между out, напр., в индексный порт и in из порта данных, чтобы неторопливое железо успело не только принять байт по out, а и отработать действие (напр., выставить в порт данных значение).