Robotrontechnik-Forum

Registrieren || Einloggen || Hilfe/FAQ || Suche || Mitglieder || Home || Statistik || Kalender || Admins Willkommen Gast! RSS

Robotrontechnik-Forum » Technische Diskussionen » NASCOM ROM BASIC Ver 4.7, (C) 1978 Microsoft » Themenansicht

Autor Thread - Seiten: -1-
000
24.10.2014, 12:06 Uhr
PIC18F2550

Avatar von PIC18F2550

Hallo,

ich habe ein Reassemblierten Quelltext erhalten und überlege ob dieser Auf CP/M 2.2 läuft.

https://onedrive.live.com/redir?resid=F4635467AEAC3DE4!2139&authkey=!AGvUcRdcX9JkiJ4&ithint=file%2casm

Einige Dinge irirtieren mich etwas.

1. Programmstart ab 2000H. Währe eine verschiebung nach 100H möglich?

2. Der "WRKSPC" beginnt hier bei 40B0H. Dabei ist hinter dem Quelltext noch reichlich Platz da er bei 1C66H endet. hat das einen Grund?(8080?)

3. Da es sich um ein ROM Code handelt seteht die Frage ob er auch im RAM Funktioniert. Ich denke da an den ZX81 Bug.
--
42 ist die Antwort auf die "Frage nach dem Leben, dem Universum und dem ganzen Rest"
Aktuelle Projektdokumentationen
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
001
24.10.2014, 14:13 Uhr
Wusel_1



Kannst du ja mal testen. Bei org 2000h ebend org 0100h eingeben und assemblieren. Dan kannst du das ja testen. Habe aber jetzt nicht die ganze Liste durchgesehen.
--
Beste Grüße Andreas
______________________________________
DL9UNF ex Y22MF es Y35ZF
JO42VP - DOK: Y43 - LDK: CE

*** wer glaubt, hört auf zu denken ***
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
002
24.10.2014, 14:55 Uhr
holm

Avatar von holm

Es scheint wohl leicht "verbesserter " 8080 Code zu sein, vorkommen von relatvien Sprüngen sind selten...

Gruß,

Jolm
--
float R,y=1.5,x,r,A,P,B;int u,h=80,n=80,s;main(c,v)int c;char **v;
{s=(c>1?(h=atoi(v[1])):h)*h/2;for(R=6./h;s%h||(y-=R,x=-2),s;4<(P=B*B)+
(r=A*A)|++u==n&&putchar(*(((--s%h)?(u<n?--u%6:6):7)+"World! \n"))&&
(A=B=P=u=r=0,x+=R/2))A=B*2*A+y,B=P+x-r;}
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
003
24.10.2014, 15:55 Uhr
PIC18F2550

Avatar von PIC18F2550


Zitat:
Wusel_1 schriebDan kannst du das ja testen.

Das scheitert momentan noch an der fehlenden Hartware.
Aber man kann ja schon etwas vorbereiten.
Die Fragen sind nur dafür da das ich nicht erst wochen Feststellen muß das das gar nicht geht.


Zitat:
holm schrieb
Es scheint wohl leicht "verbesserter " 8080 Code zu sein, vorkommen von relatvien Sprüngen sind selten...

Gruß,

---> Jolm



Den Verdacht hatte ich auch schon nur das erklährt nicht die große Lücke zwischen Programm und Basiccode.

Da ich keinen ROM verwende wollte ich die paar Byts gerne mit nutzen.
--
42 ist die Antwort auf die "Frage nach dem Leben, dem Universum und dem ganzen Rest"
Aktuelle Projektdokumentationen
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
004
24.10.2014, 19:23 Uhr
Micha

Avatar von Micha

Nascom 4.7 war das Microsoft-Basic für den Nascom-Computer, einen frühen Home Computer. Das ist nicht für CP/M geschneidert, was die I/O betrifft. Also man muss schon ziemlicher Masochist sein - oder eben sehr experimentierfreudig, um da dran rumzufriemeln und das CP/M tauglich zu machen. Unter CP/M ist die Version 5.21 von Microsoft-Basic der "Quasi-Standard". Ist nebenbei bemerkt in einigen Punkten effektiver als Version 4.7.

Keine Ahnung wieso du (PIC) auf die Idee kommst das Nascom für CP/M zurecht biegen zu wollen. Das ist so wie den zweiten Schritt vor dem ersten zu gehen. Ich empfehle, erst mal die Hausaufgaben bezüglich CP/M selber zu machen. Dann klappt's auch mit der Nachbarin ;-)
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
005
24.10.2014, 19:51 Uhr
ambrosius



Unter MyZ80 läuft es nicht, habe ich gerade probiert. Auch stimmen die Systemaufrufe nicht, es wird nicht über 5h gesprungen, um Systemaufrufe zu tätigen. Wird wohl ein bißchen Arbeit machen, das alles anzupassen. Ansonsten müßten die ganzen Befehle aber funktionieren. Bis auf ein paar fehlende ':' vor Sprungmarken (24 Stck) ist es problemlos durch den Assembler gelaufen. Der Linker hat sich auch nicht beschwert.

Beste Grüße
Holger

-----------
edit: wie mir gerade aufgefallen ist, hat Holm wahrscheinlich Recht mit der Behauptung, es ist ein 8080 Listing. Der Code ist ziemlich optimierungsfähig, z.B.

...
INIT: LD DE,INITAB ; Initialise workspace
LD B,INITBE-INITAB+3; Bytes to copy
LD HL,WRKSPC ; Into workspace RAM
COPY: LD A,(DE) ; Get source
LD (HL),A ; To destination
INC HL ; Next destination
INC DE ; Next source
DEC B ; Count bytes
JP NZ,COPY ; More to move
...

läßt sich durch den LDIR-Befehl für Z80 ersetzen. Es sind mehrere solcher Kontruktionen enthalten.
--
viele Grüße
Holger

Dieser Beitrag wurde am 24.10.2014 um 19:56 Uhr von ambrosius editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
006
24.10.2014, 20:03 Uhr
ralle



Also für CP/M gibt es sowohl ein BASI.COM als auch einen BASC.COM...
--
Gruß Ralle

Wenn Sie dazu neigen, Bedienungsanleitungen zusammen mit dem Verpackungsmaterial wegzuwerfen, sehen Sie bitte von einem derart drastischen Schritt ab!...
... Nachdem Sie das Gerät eine Weile ausprobiert haben, machen Sie es sich am besten mit dieser Anleitung und ihrem Lieblingsgetränk ein oder zwei Stunden lang in Ihrem Sessel bequem. Dieser Zeitaufwand wird Sie dann später belohnen...

aus KENWOOD-Bedienungsanleitung TM-D700
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
007
25.10.2014, 00:18 Uhr
PIC18F2550

Avatar von PIC18F2550

Ha ich habs das Fehlte noch gefunden.


Quellcode:
;==================================================================================
; Contents of this file are copyright Grant Searle
;
; You have permission to use this for NON COMMERCIAL USE ONLY
; If you wish to use it elsewhere, please include an acknowledgement to myself.
;
; http://searle.hostei.com/grant/index.html
;
; eMail: home.micros01@btinternet.com
;
; If the above don't work, please perform an Internet search to see if I have
; updated the web page hosting service.
;
;==================================================================================

; Minimum 6850 ACIA interrupt driven serial I/O to run modified NASCOM Basic 4.7
; Full input buffering with incoming data hardware handshaking
; Handshake shows full before the buffer is totally filled to allow run-on from the sender

SER_BUFSIZE     .EQU     3FH
SER_FULLSIZE    .EQU     30H
SER_EMPTYSIZE   .EQU     5

RTS_HIGH        .EQU     0D6H
RTS_LOW         .EQU     096H

serBuf          .EQU     $2000
serInPtr        .EQU     serBuf+SER_BUFSIZE
serRdPtr        .EQU     serInPtr+2
serBufUsed      .EQU     serRdPtr+2
basicStarted    .EQU     serBufUsed+1
TEMPSTACK       .EQU     $20ED ; Top of BASIC line input buffer so is "free ram" when BASIC resets

CR              .EQU     0DH
LF              .EQU     0AH
CS              .EQU     0CH             ; Clear screen

                .ORG $0000
;------------------------------------------------------------------------------
; Reset

RST00           DI                       ;Disable interrupts
                JP       INIT            ;Initialize Hardware and go

;------------------------------------------------------------------------------
; TX a character over RS232

                .ORG     0008H
RST08            JP      TXA

;------------------------------------------------------------------------------
; RX a character over RS232 Channel A [Console], hold here until char ready.

                .ORG 0010H
RST10            JP      RXA

;------------------------------------------------------------------------------
; Check serial status

                .ORG 0018H
RST18            JP      CKINCHAR

;------------------------------------------------------------------------------
; RST 38 - INTERRUPT VECTOR [ for IM 1 ]

                .ORG     0038H
RST38            JR      serialInt      

;------------------------------------------------------------------------------
serialInt:      PUSH     AF
                PUSH     HL

                IN       A,($80)
                AND      $01             ; Check if interupt due to read buffer full
                JR       Z,rts0          ; if not, ignore

                IN       A,($81)
                PUSH     AF
                LD       A,(serBufUsed)
                CP       SER_BUFSIZE     ; If full then ignore
                JR       NZ,notFull
                POP      AF
                JR       rts0

notFull:        LD       HL,(serInPtr)
                INC      HL
                LD       A,L             ; Only need to check low byte becasuse buffer<256 bytes
                CP       (serBuf+SER_BUFSIZE) & $FF
                JR       NZ, notWrap
                LD       HL,serBuf
notWrap:        LD       (serInPtr),HL
                POP      AF
                LD       (HL),A
                LD       A,(serBufUsed)
                INC      A
                LD       (serBufUsed),A
                CP       SER_FULLSIZE
                JR       C,rts0
                LD       A,RTS_HIGH
                OUT      ($80),A
rts0:           POP      HL
                POP      AF
                EI
                RETI

;------------------------------------------------------------------------------
RXA:
waitForChar:    LD       A,(serBufUsed)
                CP       $00
                JR       Z, waitForChar
                PUSH     HL
                LD       HL,(serRdPtr)
                INC      HL
                LD       A,L             ; Only need to check low byte becasuse buffer<256 bytes
                CP       (serBuf+SER_BUFSIZE) & $FF
                JR       NZ, notRdWrap
                LD       HL,serBuf
notRdWrap:      DI
                LD       (serRdPtr),HL
                LD       A,(serBufUsed)
                DEC      A
                LD       (serBufUsed),A
                CP       SER_EMPTYSIZE
                JR       NC,rts1
                LD       A,RTS_LOW
                OUT      ($80),A
rts1:
                LD       A,(HL)
                EI
                POP      HL
                RET                      ; Char ready in A

;------------------------------------------------------------------------------
TXA:            PUSH     AF              ; Store character
conout1:        IN       A,($80)         ; Status byte      
                BIT      1,A             ; Set Zero flag if still transmitting character      
                JR       Z,conout1       ; Loop until flag signals ready
                POP      AF              ; Retrieve character
                OUT      ($81),A         ; Output the character
                RET

;------------------------------------------------------------------------------
CKINCHAR        LD       A,(serBufUsed)
                CP       $0
                RET

PRINT:          LD       A,(HL)          ; Get character
                OR       A               ; Is it $00 ?
                RET      Z               ; Then RETurn on terminator
                RST      08H             ; Print it
                INC      HL              ; Next Character
                JR       PRINT           ; Continue until $00
                RET
;------------------------------------------------------------------------------
INIT:
               LD        HL,TEMPSTACK    ; Temp stack
               LD        SP,HL           ; Set up a temporary stack
               LD        HL,serBuf
               LD        (serInPtr),HL
               LD        (serRdPtr),HL
               XOR       A               ;0 to accumulator
               LD        (serBufUsed),A
               LD        A,RTS_LOW
               OUT       ($80),A         ; Initialise ACIA
               IM        1
               EI
               LD        HL,SIGNON1      ; Sign-on message
               CALL      PRINT           ; Output string
               LD        A,(basicStarted); Check the BASIC STARTED flag
               CP        'Y'             ; to see if this is power-up
               JR        NZ,COLDSTART    ; If not BASIC started then always do cold start
               LD        HL,SIGNON2      ; Cold/warm message
               CALL      PRINT           ; Output string
CORW:
               CALL      RXA
               AND       %11011111       ; lower to uppercase
               CP        'C'
               JR        NZ, CHECKWARM
               RST       08H
               LD        A,$0D
               RST       08H
               LD        A,$0A
               RST       08H
COLDSTART:     LD        A,'Y'           ; Set the BASIC STARTED flag
               LD        (basicStarted),A
               JP        $0150           ; Start BASIC COLD
CHECKWARM:
               CP        'W'
               JR        NZ, CORW
               RST       08H
               LD        A,$0D
               RST       08H
               LD        A,$0A
               RST       08H
               JP        $0153           ; Start BASIC WARM
              
SIGNON1:       .BYTE     CS
               .BYTE     "Z80 SBC By Grant Searle",CR,LF,0
SIGNON2:       .BYTE     CR,LF
               .BYTE     "Cold or warm start (C or W)? ",0
              
.END




Zitat:
Micha schrieb
Keine Ahnung wieso du (PIC) auf die Idee kommst das Nascom für CP/M zurecht biegen zu wollen. Das ist so wie den zweiten Schritt vor dem ersten zu gehen. Ich empfehle, erst mal die Hausaufgaben bezüglich CP/M selber zu machen. Dann klappt's auch mit der Nachbarin ;-)

Heute schlecht drauf?
Das stammt übrigens aus einem deiner Projekte also erst Denken....

Auf "Grant's 7-chip Z80 computer" steht:
This is the same BASIC that I use in the ROM on the CP/M computer. Originally from a Nascom computer, modified to remove all hardware-specific code.

Die "intmini.asm" hab ich wohl übersehen.
Beim ersten vergleich konnte ich nur unterschiede bei WRKSPC und ORG 2000/150 feststellen.
--
42 ist die Antwort auf die "Frage nach dem Leben, dem Universum und dem ganzen Rest"
Aktuelle Projektdokumentationen

Dieser Beitrag wurde am 25.10.2014 um 00:18 Uhr von PIC18F2550 editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
008
25.10.2014, 00:32 Uhr
PIC18F2550

Avatar von PIC18F2550

ambrosius ein Danke für deine Mühe.
ralle ein Danke für deinen Tip

Das da noch mächtig viel 8080 drinn steckt habe ich schon vermutet.
Aber vor der Optimierung steht erst einmal das funktionieren.

Ich muss erstmal herausfinden was die ganzen routinen in der "intmini.asm" anstellen.

ich habe den verdacht das hier nur auf die Console umgeleitet wird.
Und das nur die Hartware das CP/M Computers ungenutzt wird.

In dem Fall werd ich mich wohl an ralles Empfehlung halten.

Zitat:
ralle schrieb
Also für CP/M gibt es sowohl ein BASI.COM als auch einen BASC.COM...


Da brauch ich dann nur noch die Quelltexte.
--
42 ist die Antwort auf die "Frage nach dem Leben, dem Universum und dem ganzen Rest"
Aktuelle Projektdokumentationen
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
Seiten: -1-     [ Technische Diskussionen ]  



Robotrontechnik-Forum

powered by ThWboard 3 Beta 2.84-php5
© by Paul Baecher & Felix Gonschorek