BootAble – FreeDOS boot testing freeware
To obtain direct, low-level access to a system's mass storage drives, SpinRite runs under a GRC-customized version of FreeDOS which has been modified to add compatibility with all file systems. In order to run SpinRite it must first be possible to boot FreeDOS.
GRC's “BootAble” freeware allows anyone to easily create BIOS-bootable media in order to workout and confirm the details of getting a machine to boot FreeDOS through a BIOS. Once the means of doing that has been determined, the media created by SpinRite can be booted and run in the same way.
The participants here, who have taken the time to share their knowledge and experience, their successes and some frustrations with booting their computers into FreeDOS, have created a valuable knowledgebase which will benefit everyone who follows.
You may click on the image to the right to obtain your own copy of BootAble. Then use the knowledge and experience documented here to boot your computer(s) into FreeDOS. And please do not hesitate to ask questions – nowhere else can better answers be found.
(You may permanently close this reminder with the 'X' in the upper right.)
Just for fun. Not everyone is driven by money.I don’t know is your are trying to learn assembly to make money or just for fun or both, but it you are try to make money in general by making software I would be careful. It does not seem clear to me what languages and development tools people make employment decision want the people working on the code to be investing time and money into. But I think that understanding assembly is helpful in understanding how computers work and in my mind it helps understand higher level languages.
Going to check that game out! Want to learn 6502 assembler as well. As a kid I had a Commodore 64 and that was magic to me. Was a little bit too young at the time to understand what was happening when reading the code. But now, almost 40 years later, I should be able to understand (some of) it). Bought a second hand Commdore 64 a few months ago, so I have a real 6502 available. Or actually, a 6510, but I understand that's not actually that different.As strange as this may sound, there is a game (probably more) on Steam that may be helpful. (Making learning fun can be quite helpful for some learners.) Check out https://store.steampowered.com/app/792100/7_Billion_Humans/ . It's visual, but it definitely reminds me of my days learning 6502 assembler.... the instructions you visualize are very close to 6502 assembler. It will probably go on sale at some point, so if you don't think it's worth full price, stick it on your wishlist and wait for a sale notification. Also, I suspect some other games on Steam may also be in a similar category and get recommended to you. (Such as ASTRA-256 Assembler, Shenzhen I/O, TIS-100 .)
There are different assembly languages for different CPUs. Steve did say on a different twit podcast that a thing call a TI launchpad could be used to learn assembly, but it is not x86 assembly. I think the TI launchpad has a small instruction set like maybe 40 instruction.Just for fun. Not everyone is driven by money.
Do you know about Ben Eater on YouTube? If not, you should. He's building a 6502 computer from first principles. https://www.youtube.com/@BenEaterWant to learn 6502 assembler
Ben is cool. Most of what he's doing is beyond me, but I love his no-nonsense matter-of-fact "glitzless" style.Do you know about Ben Eater on YouTube? If not, you should. He's building a 6502 computer from first principles. https://www.youtube.com/@BenEater
org 0x100 ; Code starts at offset 100h
use16 ; Use 16-bit code
mov ax,0900h ; DOS function: AX = 0900h (Show Message)
mov dx,hello ; DX = "Hello World!$"
int 21h ; Call a DOS function: AX = 0900h (Show Message)
mov ax,4c00h ; DOS function: AX = 4c00h (Exit)
int 21h ; Call a DOS function: AX = 4c00h (Exit)
hello db "Hello World!$"
nasm hello.asm -o hello.com
Watched a few of the 6502 series. Very informative. He explains everthing very well at just the right speed (for me). Thanks for mentioning his channel!Do you know about Ben Eater on YouTube? If not, you should. He's building a 6502 computer from first principles. https://www.youtube.com/@BenEater
Yes, I just sent Microsoft another email asking about their developer licenses. OMG it is boring reading software licenses. If they actually email me back and I decide to buy some software from them I will ask why visual studio is so blotted. It would be really cool to have Steve's brain.I think that the most important thing for learning MASM (x86 ASM) is having a truly comfortable development environment.
Assuming you're using Windows, everyone raves about the free Visual Studio Community Edition . You'll need to get MASM's tools which are now also available at no charge from Microsoft. Once you have those things in place, you'll have a very comfortable environment where you can write, edit, debug (single step and view registers and memory, etc.)
Then you'll have an environment where you're COMFORTABLY able to write x86 assembly code that looks like this:
Well really the brain of any one really good at 32-bit or 64-bit intel assembler.Yes, I just sent Microsoft another email asking about their developer licenses. OMG it is boring reading software licenses. If they actually email me back and I decide to buy some software from them I will ask why visual studio is so blotted. It would be really cool to have Steve's brain.
You could always just use an open source assembler like FASM (Flat Assembler 2)Yes, I just sent Microsoft another email asking about their developer licenses. OMG it is boring reading software licenses. If they actually email me back and I decide to buy some software from them I will ask why visual studio is so blotted. It would be really cool to have Steve's brain.
YES! That's the Visual Studio that I meant.I wonder if Visual Studio Code could be used instead of the full Visual Studio?
That also looks like a great learning tool. What's not clear is whether a debugging facility is also integrated? For learning, an integrated debugging facility is SO important. That's what Visual Studio Code offers, and since it's free and the MASM tools are free, that's what I would recommend for Windows users.You could always just use an open source assembler like FASM (Flat Assembler 2)
We're sorry, this download is no longer available
.Are they not included when you download "Visual Studio Code". Or at least downloadable as an extension after VSC is installed?When I try to download MASM's tools. I get this messageWe're sorry, this download is no longer available.
See this link.When I try to download MASM's tools. I get this messageWe're sorry, this download is no longer available.
I am sorry, but I don't even understand this response! Can you explain?I would try a few things all at the same time. 1) write down on a piece of paper what you want and why you want it. 2) try to contact the original organization of what you want if they still exist 3) think about if it is possible that any one besides yourself is aware or could become aware of what you are wanting to do and why 3) pick a few different search engines and try searching for what you want, if you think you found, it make sure it is correct if it is truly important.
Whats the differences between MASM and NASM?
MASM (Microsoft Macro Assembler) and NASM (Netwide Assembler) are both popular assemblers used to convert assembly language code into machine code. Here are some key differences between the two:
Syntax:
MASM uses Intel syntax, which is more closely aligned with the syntax used in Intel's official documentation.
NASM uses a more flexible syntax that resembles traditional Unix assembly syntax. It is often referred to as "AT&T syntax."
Platform Support:
MASM is primarily associated with the Windows platform and is often used for developing Windows applications and drivers.
NASM is cross-platform and can generate code for a variety of operating systems, including Windows, Linux, macOS, and others.
Licensing:
MASM is proprietary software owned by Microsoft and is typically distributed as part of the Microsoft Visual Studio suite.
NASM is open-source software distributed under the GNU General Public License (GPL), which means it is free to use and modify.
Features:
MASM has been around for a long time and has extensive documentation and support for Windows-specific features and APIs.
NASM is known for its simplicity, speed, and portability. It may lack some of the advanced features found in MASM, but it is highly customizable and suitable for a wide range of applications.
Assembler Directives:
Both MASM and NASM support assembler directives, but the syntax and set of directives may differ between the two assemblers.
Community and Resources:
MASM has a large user base and extensive documentation provided by Microsoft. There are also many online resources and tutorials available for learning MASM programming.
NASM also has a strong community of users and contributors, with documentation and resources available on its official website and various online forums and communities.
Overall, the choice between MASM and NASM often depends on factors such as the target platform, licensing preferences, and familiarity with the syntax and features of each assembler.
Right. This is very typical of microprocessor design, since it allows for a surprisingly significant reduction in chip complexity and code size by allowing for "implied" registers for many opcodes. Mainframe architectures tend to be for more “orthogonal.” One of the biggest problems created by non-orthogonal (microprocessor) architectures is that they tend to be hostile to higher-level compilation. When I'm coding for x86, I'm able to design my implementation around the specific needs (strong biases) created by the processor's design. The result is insanely efficient code, but it is not forward-looking. It's not the future.When I picked up my first book on 8086 architecture, the idea of certain registers with only one function felt so foreign to me.
Except for the M68K, though it did have separate general data registers and general address registers. This was not nearly as restrictive as the 8086 was. The intel 64-bit architecture does have eight general registers in addition to the legacy registers. That was welcome.Right. This is very typical of microprocessor design, since it allows for a surprisingly significant reduction in chip complexity and code size by allowing for "implied" registers for many opcodes. Mainframe architectures tend to be for more “orthogonal.” One of the biggest problems created by non-orthogonal (microprocessor) architectures is that they tend to be hostile to higher-level compilation. When I'm coding for x86, I'm able to design my implementation around the specific needs (strong biases) created by the processor's design. The result is insanely efficient code, but it is not forward-looking. It's not the future.
Yes... and I SO MUCH WISH that the Motorola 68000 had been chosen by IBM. It was a close call, apparently. THAT would have changed the destiny of the PC industry SO significantly. <sigh> Instead we're stuck with this crock.Except for the M68K
One thing about assembly programs on Windows is that when you write a console program for example and use C or C++, the main function is started by the runtime of the language (the C or C++ runtime) in assembler I think it is a little different, if I understand correctly, there really would not be any runtime like that. In Windows, I think when a program is started, it is NTDLL.dll that starts it and I think it does things like allocate a process and load up the required DLLs, maybe start the threads.View attachment 1208
This example of ASM code look super clean. Love how it starts with [BITS 16] and [ORG 0100H].
Right. This is very typical of microprocessor design, since it allows for a surprisingly significant reduction in chip complexity and code size by allowing for "implied" registers for many opcodes. Mainframe architectures tend to be for more “orthogonal.” One of the biggest problems created by non-orthogonal (microprocessor) architectures is that they tend to be hostile to higher-level compilation. When I'm coding for x86, I'm able to design my implementation around the specific needs (strong biases) created by the processor's design. The result is insanely efficient code, but it is not forward-looking. It's not the future.
Having worked on CISC and RISC, both are rewarding. Though IMO working in IBM S/360, S/370, z/Series mainframes were most rewarding simply because I could do things like branch tables, i.e.,That is interesting, it is not the first time that I have heard something like that. I am not sure of the reasoning behind that. I do recall that you (Steve) have pointed out that you like x86 because it is a complex instruction set. Saying that writing assembly in for a RISC is not all that rewarding and too difficult I suppose. Maybe I will do a google search comparing Motorola 68000 to intel. This is the reason I’ve said before Steve should write book. (In all his spare time). I will have to check around on Amazon for microprocessor design books, maybe somebody covers these ideas that Steve and @cschuber are discussing. I will look for that 8086 Book by Russell Rector, but I am guessing is like an 80s book. I wish they would put all those 80s and 90s programming books on kindle. Thanks for your input @cshuber, keep it coming, sometimes learning things is easier in small chunks over time and sometimes it good and set aside sometime and do a “deep dive” I will think about that, learning the machine architecture and less the assembly “language”.
I guess with high level languages, I often suggest people focus on things like learning to use a debugger, the call stack, control structures, types and data structures, and threads.
EX R4,LOCSTART LOCATE START OF NEXT TOKEN
BC 7,*+4(R2) SOMETHING FOUND
B MAINNFND 00 - NOTHING FOUND
B MAINRBRK 04 - RIGHT BRACKET FOUND
B MAINEQAL 08 - EQUAL SIGN FOUND
B MAINLBRK 0C - LEFT BRACKET FOUND
B MAINCOMA 10 - COMMA FOUND
B MAINSTRT 14 - START OF TOKEN FOUND
B MAINSPEC 18 - SPECIAL CHARACTER...
...
LOCSTART TRT 0(*-*,R3),0(R5) LOCATE START OF NEXT TOKEN
...
#NXTTOKN HTRTAB (C')',4),(C'=',8),(C'(',X'0C'),(C',',X'10'), X
(C'A'-C'I',C'J'-C'R',C'S'-C'Z',C'0'-C'9',X'4A',C'.', X
C'<',C'|',C'&&',C'!',C'$',C'*',C';',X'5F',C'/',C'%', X
C'_',C'>',C'?',C':',C'#',C'@',C'''',C'"',X'14')
When I try to download MASM's tools. I get this messageWe're sorry, this download is no longer available
.
Well adding:I also made a Video to covering the debugging of masm code in visual studio vs windbg. I am trying to understand why windbg is so much easier. I would rather just stay in visual studio. If anyone has an useful ideas, feel free to make a video with your tooling you use to code in asm/masm. Thank you.
Well by looking at the SIB source, it looks like that is using the ANSI versions, but that is from 1996, I am not sure if @Steve or most people would have moved over to UNICODE, but I have got to figure this out.Well adding:
__UNICODE__ equ 1
before my includes does make it use UNICODE, but then changing everything to unicode seems like it would be hard work, I wounder how people that use MASM32 alot would do it?
ok, ok, there is a file c:\masm32\help\hlhelp.chm that tells how to do unicode support, but I just got that overwhelmed feeling so I need to clear my head. I do think the newest version of MASM32 supports unicode based on that help file.Well by looking at the SIB source, it looks like that is using the ANSI versions, but that is from 1996, I am not sure if @Steve or most people would have moved over to UNICODE, but I have got to figure this out.