nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 17 Apr 2024 22:07



Reply to topic  [ 211 posts ]  Go to page Previous  1, 2, 3, 4, 5, 6, 7, 8 ... 15  Next
IBM PCjr 
Author Message
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22528
Location: Silicon Valley
Reply with quote
А тем временем я научился писать свои картриджи, загоняя туда COM-файлы :)
Code:
       org 100h

section .text

start:
       MOV     BH,7 ; 0 for DOSBox
       MOV     BL,4
       MOV     CX,1
       MOV     DH,18
       MOV     DL,0
       LEA     SI,[STRI]
NEXT:  MOV     AH,2
       INT     10H
       INC     DX
       MOV     AL,[SI]
       CMP     AL,'$'
       JE      KON
       MOV     AH,9
       INT     10H
       INC     SI
       JMP     SHORT NEXT
KON:   JMP     KON

section .data

STRI   DB      'Hello, nedoPC ! $'


Attachments:
PCjr14.jpg
PCjr14.jpg [ 209.75 KiB | Viewed 37271 times ]

_________________
:dj: https://mastodon.social/@Shaos
27 Dec 2016 22:33
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22528
Location: Silicon Valley
Reply with quote
На фотке картридж вставлен в левую дырку, но в правой он тоже работает - значит все CS-ы разведены в обе дырки, что есть хорошо. Получается так - разрабатываем программулину в DOSBox как COM-файл (нестандартный, т.к. данные что вместе с кодом лежат будут только для чтения - изменяемые данные надо будет держать где-то в ОЗУ) работающую только с BIOS (т.к. ДОСа нету), далее с помощью моей волшебной программы (исходники которой я скоро выложу на гитхаб) создаём образ для прошивки и вперёд :kruto:

P.S. Выложил: https://gitlab.com/shaos/pcjr
Волшебная программка лежит в каталоге software и называется PCJRCART.C :)
Волшебного в ней собственно подсчёт CRC16, который толком нигде не описан применительно к PCjr-картриджам:
 PCJRCART.C
Code:
/* PCJRCART.C by Shaos (Dec 2016) */

/* Create ROM image from COM file for PCjr cartrige */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "crc16.h"

#define MAXSIZE 65535

int main(int argc, char **argv)
{
    FILE *f;
    int i;
    char fname[100],*po;
    unsigned long sz;
    unsigned char extra = 0;
    unsigned short crc = 0;
    unsigned char *bytes = (unsigned char*)malloc(MAXSIZE);
    if(bytes==NULL)
    {
       printf("\nCan't allocate memory!\n\n");
       return -1;
    }
    if(argc<2)
    {
       printf("\nFilename was not specified!\n\n");
       return -2;
    }
    memset(bytes,0,MAXSIZE);
    bytes[0] = 0x55;
    bytes[1] = 0xAA;

    CalculateTable_CRC16();

    strcpy(fname,argv[1]);
    f = fopen(fname,"rb");
    if(f==NULL)
    {
       printf("\nCan't open file '%s'!\n\n",fname);
       free(bytes);
       return -3;
    }
    fseek(f,0,SEEK_END);
    sz = ftell(f);
    printf("%s %lu\n",fname,sz);
    if(sz>=65280)
    {
       printf("\nFile is too large!\n\n");
       fclose(f);
       free(bytes);
       return -4;
    }
    fseek(f,0,SEEK_SET);
    fread(&bytes[256],1,sz,f);
    fclose(f);

    sz += 258;
    if(sz&511)
    {
       sz &= 0xFE00;
       sz += 512;
    }
    bytes[2] = sz>>9;
    printf("ROM size is %lu bytes (%i)\n",sz,bytes[2]);
    bytes[3] = 0xE9;
    bytes[4] = 0x01;
    bytes[5] = 0x00;
    bytes[6] = 0x00;
    bytes[7] = 0xB8;
    bytes[8] = 0x00;
    bytes[9] = 0x01;
    bytes[10] = 0xFF;
    bytes[11] = 0xE0;

    crc = Compute_CRC16(bytes,sz-2);
    printf("Calculated CRC is 0x%4.4X\n",crc);

    if(sz==65536) extra = crc&0x00FF;
    else bytes[sz-1] = crc&0x00FF;
    bytes[sz-2] =  (crc&0xFF00)>>8;

    crc = Compute_CRC16(bytes,sz);
    printf("Corrected CRC is 0x%4.4X\n",crc);

    po = strrchr(fname,'.');
    if(po!=NULL) *po=0;
    strcat(fname,".bin");
    f = fopen(fname,"wb");
    if(f==NULL)
    {
       printf("\nCan't open file '%s'!\n\n",fname);
       free(bytes);
       return -5;
    }
    if(sz<=32768) fwrite(bytes,1,sz,f);
    else fwrite(bytes,1,32768,f);
    fclose(f);
    if(sz>32768)
    {
       fname[strlen(fname)-1] = '2';
       f = fopen(fname,"wb");
       if(f==NULL)
       {
          printf("\nCan't open file '%s'!\n\n",fname);
          free(bytes);
          return -6;
       }
       if(sz==65536)
       {
          fwrite(&bytes[32768],1,32767,f);
          fputc(extra,f);
       }
       else fwrite(&bytes[32768],1,sz-32768,f);
       fclose(f);
    }
    free(bytes);
    return 0;
}

_________________
:dj: https://mastodon.social/@Shaos


27 Dec 2016 22:38
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22528
Location: Silicon Valley
Reply with quote
Shaos wrote:
А - так на PCjr кассетный бейсик - он ничего не знает про дискеты :)

хм, похоже бейсик, который на картридже ЗНАЕТ про дискеты!
только ему нужны уже отформатированные, чтобы можно было SAVE и LOAD делать
(это я листаю книжку по PCjr бейсикам, что только сегодня получил по почте)

_________________
:dj: https://mastodon.social/@Shaos


27 Dec 2016 22:58
Profile WWW
Doomed

Joined: 16 Dec 2014 11:58
Posts: 370
Location: Киев
Reply with quote
Теперь и я потерялся, что изначально надо было.
Вроде скопировать системную дискету на 1 дисководе, не?

Тогда начнем сначала.
Во-1 видел в dir disccopy.com.
Во-2 - есть какая-то работающая возможность скопировать файл (любой) с одной дискеты на другую?
Если да - на чистую дискету первым файлом кладем ibmbio.com. Затем ibmdos.com, command.com. Ставим ibm*.com атрибуты hidden, system.
Осталось перенести бут-сектор, .com под это дело я сегодня выложу.

Если не копируется, сделаю .com, копирующий целыми дорогами.

added Исходник (fasm):
Code:
                        org 100h

                        mov             sp,0FFFEh

                        mov             dx,msg1
                        mov             ah,09h
                        int             21h
                        xor             ax,ax
                        int             16h

                        mov             ax,0201h
                        mov             cx,1
                        xor             dx,dx
                        mov             bx,buf
                        int             13h

                        mov             dx,msg2
                        mov             ah,09h
                        int             21h
                        xor             ax,ax
                        int             16h

                        mov             ax,0301h
                        mov             cx,1
                        xor             dx,dx
                        mov             bx,buf
                        int             13h

                        mov             ax,4C00h
                        int             21h

msg1                    db              'Insert READ disk A: and press any key',13,10,'$'
msg2                    db              'Insert WRITE disk A: and press any key',13,10,'$'

buf                     db              512 dup(0)


Attachments:
File comment: Копировщик бут-сектора, переименовать в .com
bootcopy.txt [649 Bytes]
Downloaded 1329 times
28 Dec 2016 00:55
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Vic3Dexe wrote:
Теперь и я потерялся, что изначально надо было.
Вроде скопировать системную дискету на 1 дисководе, не?

На данный момент Shaos, видимо, с картриджа уже всё запустит...
А так, по существу, похоже что его утилита "формат" не хочет попилить дискету... :mrgreen:

Shaos, кстати, а ты заклеил непрозрачным скотчем дырки защиты от записи своих 5-дюймовок? 8)
Attachment:
5_25.gif
5_25.gif [ 21.23 KiB | Viewed 37261 times ]

_________________
iLavr


28 Dec 2016 06:09
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22528
Location: Silicon Valley
Reply with quote
Да нету у меня диска с полным досом ещё - ни формата, ни дисккопи - ничего...

Я пока просто думаю как подручными средствами скопировать дискету с бутом

P.S. У биоса 13h вроде есть функция 5 - форматирование дорожки, можно попробовать свой недоформат нагородить

_________________
:dj: https://mastodon.social/@Shaos


28 Dec 2016 06:17
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Ну тем не менее - на чистых дискетах эту дырочку перед форматом заклей...

И вот еще что, если у тебя дискеты HD - High Density:
Attachment:
525_Dialog1.2_2.jpg
525_Dialog1.2_2.jpg [ 31.31 KiB | Viewed 37255 times ]

то дисковод IBM PCjr их скорее всего ни читать не форматировать не будет.

Меня терзает смутное сомнение, что он под DD - Doube Density расточен:
Attachment:
5.25-DSDD_2.jpg
5.25-DSDD_2.jpg [ 46.49 KiB | Viewed 37255 times ]

_________________
iLavr


28 Dec 2016 06:33
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
IgorR76 wrote:
Lavr wrote:
Ну тем не менее - на чистых дискетах эту дырочку перед форматом заклей...
:no: Когда заклеена-запись запрещена.
Совершенно верно! Это у меня уже, похоже, склероз наступает... :lol:
Но пока еще - очень раний: сам уже спохватился, что не так... :mrgreen:
Attachment:
5_25_p.gif
5_25_p.gif [ 7.27 KiB | Viewed 37252 times ]

_________________
iLavr


28 Dec 2016 06:46
Profile
Doomed

Joined: 16 Dec 2014 11:58
Posts: 370
Location: Киев
Reply with quote
Shaos wrote:
Да нету у меня диска с полным досом ещё - ни формата, ни дисккопи - ничего...

:ebiggrin:
Так а что есть?
Shaos wrote:
Я пока просто думаю как подручными средствами скопировать дискету с бутом

Непонятно, как решать задачку, не имея исходных данных.
Shaos wrote:
P.S. У биоса 13h вроде есть функция 5 - форматирование дорожки, можно попробовать свой недоформат нагородить

Если можно нагородить свой формат, можно и родной запустить. Или я чего-то не понимаю? Есть же картридж, опять-таки...

Копировщик целой дискеты (приемник, понятное дело, должен быть форматирован).
360k памяти найдется?
Code:
                        org 100h
                        use16

                        ;360k
TRKS                    =               40
SPT                     =               9
HDS                     =               2

                        mov             sp,0FFFEh

                        mov             ah,48h
                        mov             bx,(TRKS*SPT*HDS*512) shr 4
                        int             21h
                        jnc             .3
                        jmp             fail
.3:                     mov             ES,ax
                        mov             di,ax

                        mov             dx,msg1
                        mov             ah,09h
                        int             21h
                        xor             ax,ax
                        int             16h

.1:                     mov             ax,(2 shl 8)+SPT
                        mov             cl,1
                        mov             ch,[cyl]
                        mov             dh,[hd]
                        xor             [hd],1
                        jnz             .4
                        inc             [cyl]
.4:                     mov             dl,0
                        xor             bx,bx
                        int             13h
                        mov             ax,ES
                        add             ax,(SPT*512) shr 4
                        mov             ES,ax
                        cmp             [cyl],TRKS
                        jb              .1

                        mov             dx,msg2
                        mov             ah,09h
                        int             21h
                        xor             ax,ax
                        int             16h

                        mov             ES,di
                        mov             word [hd],0
.2:                     mov             ax,(3 shl 8)+SPT
                        mov             cl,1
                        mov             ch,[cyl]
                        mov             dh,[hd]
                        xor             [hd],1
                        jnz             .5
                        inc             [cyl]
.5:                     mov             dl,0
                        xor             bx,bx
                        int             13h
                        mov             ax,ES
                        add             ax,(SPT*512) shr 4
                        mov             ES,ax
                        cmp             [cyl],TRKS
                        jb              .1

                        mov             ES,di
                        mov             ah,49h
                        int             21h

fail:
                        mov             ax,4C00h
                        int             21h

msg1                    db              'Insert READ disk A: and press any key',13,10,'$'
msg2                    db              'Insert WRITE disk A: and press any key',13,10,'$'
hd                      db              0
cyl                     db              0


Last edited by Vic3Dexe on 28 Dec 2016 07:01, edited 2 times in total.



28 Dec 2016 06:52
Profile
Senior

Joined: 27 Jul 2015 15:20
Posts: 101
Reply with quote
А дискеты HD и DD отличаются качеством магнитного слоя, и соответственно плотностью записи. Физически-доп.отверстие в конверте дискеты. У меня HD диски хорошо работали в DD приводе.


28 Dec 2016 06:55
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22528
Location: Silicon Valley
Reply with quote
IgorR76 wrote:
:esmile:
Чтобы скопировать что-то, надо отформатировать новый диск под формат pc-dos. Лучше это делать самим досом. Если его нет-может есть какой-то другой комп с контроллером флоппи? Можно подключить драйв 5.25 к нему и форматнуть. А за одно и закинуть на диск дос... У меня вот есть целых два таких старых компа. Но дисковод 5.25 я выкинул на помойку вместе со спектрумом и дискетами 10 лет назад. Теперь сожалею!

Я тоже выкинул свою коллекцию 3-дюймовых и 5-дюймовых дискет когда Родину покидал - надо было диски с досом хотя бы взять с собой в эммиграцию...

И других компов с досом у меня нет, а тем более с 5-дюймовыми дисководами (есть ноутбук с FreeDOS, но там внешний 3-дюймовый дисковод)...

_________________
:dj: https://mastodon.social/@Shaos


28 Dec 2016 06:55
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22528
Location: Silicon Valley
Reply with quote
Vic3Dexe wrote:
Shaos wrote:
P.S. У биоса 13h вроде есть функция 5 - форматирование дорожки, можно попробовать свой недоформат нагородить

Если можно нагородить свой формат, можно и родной запустить. Или я чего-то не понимаю? Есть же картридж, опять-таки...

Ну я могу конечно с сети стянуть FORMAT.COM для PC-DOS 2.10, однако не факт, что он с картриджа запустится - он же только для чтения, т.е. если COM использует тот же сегмент для изменяемых данных, то не полетит - надо чего-то хакать...

Vic3Dexe wrote:
360k памяти найдется?

Неа - у меня только 256КБ, причём вместе с видеопамятью...

_________________
:dj: https://mastodon.social/@Shaos


28 Dec 2016 06:58
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
IgorR76 wrote:
А дискеты HD и DD отличаются качеством магнитного слоя, и соответственно плотностью записи. Физически-доп.отверстие в конверте дискеты. У меня HD диски хорошо работали в DD приводе.

Скорость вращения шпинделя у них разная - так что сомнительно, чтобы "HD диски хорошо работали в DD приводе".
Вот если наоборот - то еще куда ни шло...
Ну и токи записи для разных магнитных слоёв несколько отличаются.

_________________
iLavr


28 Dec 2016 07:00
Profile
Doomed

Joined: 16 Dec 2014 11:58
Posts: 370
Location: Киев
Reply with quote
Shaos wrote:
Ну я могу конечно с сети стянуть FORMAT.COM для PC-DOS 2.10, однако не факт, что он с картриджа запустится - он же только для чтения, т.е. если COM использует тот же сегмент для изменяемых данных, то не полетит - надо чего-то хакать...

Так картридж виден как рамдиск или как кусок памяти?
Если как кусок памяти, то как с него вообще что-то запускать? :o

А, все, понял. Перечитал 1 страницу.
И 360к памяти явно нет...
Пойду думать.


28 Dec 2016 07:02
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22528
Location: Silicon Valley
Reply with quote
в PCjr стоит 360кб дисковод - так что особого выбора в режимах нет - он один :)
2 стороны, 40 дорожек на стороне, 9 секторов на дорожку, 512 байт на сектор

P.S. вот тут интересный комментарий к функции 5 - interleave 1,5,2,6,3,7,4,8 (кстати а куда делся 9?):
http://webpages.charter.net/danrollins/techhelp/0191.HTM

_________________
:dj: https://mastodon.social/@Shaos


28 Dec 2016 07:06
Profile WWW
Display posts from previous:  Sort by  
Reply to topic   [ 211 posts ]  Go to page Previous  1, 2, 3, 4, 5, 6, 7, 8 ... 15  Next

Who is online

Users browsing this forum: No registered users and 3 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:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.