IBM PCjr

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

Moderator: Shaos

User avatar
Shaos
Admin
Posts: 24085
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: IBM PCjr

Post by Shaos »

А тем временем я научился писать свои картриджи, загоняя туда COM-файлы :)

Code: Select all

       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 ! $'
You do not have the required permissions to view the files attached to this post.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24085
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: IBM PCjr

Post by Shaos »

На фотке картридж вставлен в левую дырку, но в правой он тоже работает - значит все CS-ы разведены в обе дырки, что есть хорошо. Получается так - разрабатываем программулину в DOSBox как COM-файл (нестандартный, т.к. данные что вместе с кодом лежат будут только для чтения - изменяемые данные надо будет держать где-то в ОЗУ) работающую только с BIOS (т.к. ДОСа нету), далее с помощью моей волшебной программы (исходники которой я скоро выложу на гитхаб) создаём образ для прошивки и вперёд :kruto:

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

 PCJRCART.C

Code: Select all

/* 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;
}

Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24085
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: IBM PCjr

Post by Shaos »

Shaos wrote:А - так на PCjr кассетный бейсик - он ничего не знает про дискеты :)
хм, похоже бейсик, который на картридже ЗНАЕТ про дискеты!
только ему нужны уже отформатированные, чтобы можно было SAVE и LOAD делать
(это я листаю книжку по PCjr бейсикам, что только сегодня получил по почте)
Я тут за главного - если что шлите мыло на me собака shaos точка net
Vic3Dexe
Doomed
Posts: 370
Joined: 16 Dec 2014 11:58
Location: Киев

Re: IBM PCjr

Post by Vic3Dexe »

Теперь и я потерялся, что изначально надо было.
Вроде скопировать системную дискету на 1 дисководе, не?

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

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

added Исходник (fasm):

Code: Select all

                        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)
You do not have the required permissions to view the files attached to this post.
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Re: IBM PCjr

Post by Lavr »

Vic3Dexe wrote:Теперь и я потерялся, что изначально надо было.
Вроде скопировать системную дискету на 1 дисководе, не?
На данный момент Shaos, видимо, с картриджа уже всё запустит...
А так, по существу, похоже что его утилита "формат" не хочет попилить дискету... :mrgreen:

Shaos, кстати, а ты заклеил непрозрачным скотчем дырки защиты от записи своих 5-дюймовок? 8)
5_25.gif
You do not have the required permissions to view the files attached to this post.
iLavr
User avatar
Shaos
Admin
Posts: 24085
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: IBM PCjr

Post by Shaos »

Да нету у меня диска с полным досом ещё - ни формата, ни дисккопи - ничего...

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

P.S. У биоса 13h вроде есть функция 5 - форматирование дорожки, можно попробовать свой недоформат нагородить
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Re: IBM PCjr

Post by Lavr »

Ну тем не менее - на чистых дискетах эту дырочку перед форматом заклей...

И вот еще что, если у тебя дискеты HD - High Density:
525_Dialog1.2_2.jpg
то дисковод IBM PCjr их скорее всего ни читать не форматировать не будет.

Меня терзает смутное сомнение, что он под DD - Doube Density расточен:
5.25-DSDD_2.jpg
You do not have the required permissions to view the files attached to this post.
iLavr
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Re: IBM PCjr

Post by Lavr »

IgorR76 wrote:
Lavr wrote:Ну тем не менее - на чистых дискетах эту дырочку перед форматом заклей...
:no: Когда заклеена-запись запрещена.
Совершенно верно! Это у меня уже, похоже, склероз наступает... :lol:
Но пока еще - очень раний: сам уже спохватился, что не так... :mrgreen:
5_25_p.gif
You do not have the required permissions to view the files attached to this post.
iLavr
Vic3Dexe
Doomed
Posts: 370
Joined: 16 Dec 2014 11:58
Location: Киев

Re: IBM PCjr

Post by Vic3Dexe »

Shaos wrote:Да нету у меня диска с полным досом ещё - ни формата, ни дисккопи - ничего...
:ebiggrin:
Так а что есть?
Shaos wrote:Я пока просто думаю как подручными средствами скопировать дискету с бутом
Непонятно, как решать задачку, не имея исходных данных.
Shaos wrote:P.S. У биоса 13h вроде есть функция 5 - форматирование дорожки, можно попробовать свой недоформат нагородить
Если можно нагородить свой формат, можно и родной запустить. Или я чего-то не понимаю? Есть же картридж, опять-таки...

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

Code: Select all

                        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.
IgorR76
Senior
Posts: 102
Joined: 27 Jul 2015 15:20

Re: IBM PCjr

Post by IgorR76 »

А дискеты HD и DD отличаются качеством магнитного слоя, и соответственно плотностью записи. Физически-доп.отверстие в конверте дискеты. У меня HD диски хорошо работали в DD приводе.
User avatar
Shaos
Admin
Posts: 24085
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: IBM PCjr

Post by Shaos »

IgorR76 wrote::esmile:
Чтобы скопировать что-то, надо отформатировать новый диск под формат pc-dos. Лучше это делать самим досом. Если его нет-может есть какой-то другой комп с контроллером флоппи? Можно подключить драйв 5.25 к нему и форматнуть. А за одно и закинуть на диск дос... У меня вот есть целых два таких старых компа. Но дисковод 5.25 я выкинул на помойку вместе со спектрумом и дискетами 10 лет назад. Теперь сожалею!
Я тоже выкинул свою коллекцию 3-дюймовых и 5-дюймовых дискет когда Родину покидал - надо было диски с досом хотя бы взять с собой в эммиграцию...

И других компов с досом у меня нет, а тем более с 5-дюймовыми дисководами (есть ноутбук с FreeDOS, но там внешний 3-дюймовый дисковод)...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24085
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: IBM PCjr

Post by Shaos »

Vic3Dexe wrote:
Shaos wrote:P.S. У биоса 13h вроде есть функция 5 - форматирование дорожки, можно попробовать свой недоформат нагородить
Если можно нагородить свой формат, можно и родной запустить. Или я чего-то не понимаю? Есть же картридж, опять-таки...
Ну я могу конечно с сети стянуть FORMAT.COM для PC-DOS 2.10, однако не факт, что он с картриджа запустится - он же только для чтения, т.е. если COM использует тот же сегмент для изменяемых данных, то не полетит - надо чего-то хакать...
Vic3Dexe wrote:360k памяти найдется?
Неа - у меня только 256КБ, причём вместе с видеопамятью...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Re: IBM PCjr

Post by Lavr »

IgorR76 wrote:А дискеты HD и DD отличаются качеством магнитного слоя, и соответственно плотностью записи. Физически-доп.отверстие в конверте дискеты. У меня HD диски хорошо работали в DD приводе.
Скорость вращения шпинделя у них разная - так что сомнительно, чтобы "HD диски хорошо работали в DD приводе".
Вот если наоборот - то еще куда ни шло...
Ну и токи записи для разных магнитных слоёв несколько отличаются.
iLavr
Vic3Dexe
Doomed
Posts: 370
Joined: 16 Dec 2014 11:58
Location: Киев

Re: IBM PCjr

Post by Vic3Dexe »

Shaos wrote:Ну я могу конечно с сети стянуть FORMAT.COM для PC-DOS 2.10, однако не факт, что он с картриджа запустится - он же только для чтения, т.е. если COM использует тот же сегмент для изменяемых данных, то не полетит - надо чего-то хакать...
Так картридж виден как рамдиск или как кусок памяти?
Если как кусок памяти, то как с него вообще что-то запускать? :o

А, все, понял. Перечитал 1 страницу.
И 360к памяти явно нет...
Пойду думать.
User avatar
Shaos
Admin
Posts: 24085
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: IBM PCjr

Post by Shaos »

в 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
Я тут за главного - если что шлите мыло на me собака shaos точка net